1. Pascal / Говнокод #5022

    +106

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    function IsRunningWithAdminPrivs: Boolean;
    begin
    var
      List: TStringList;
    begin
      List := TStringList.Create;
      try
        try
          List.Text := 'Sample';
          // Use SHGetFolder path to retreive the program files folder
          // here is hardcoded for the sake of the example
          List.SaveToFile('C:\program files\test.txt');
          Result := True;
        except
          Result := False;
        end;
      finally
        List.Free;
        DeleteFile('C:\program files\test.txt');
      end;
    end;

    Нуфф Саид

    Запостил: bugmenot, 22 Декабря 2010

    Комментарии (63) RSS

    • Ухахахаах.

      К слову сказать, я не знаю как под ОС с UAC, например в 7ке, проверить запущена ли программа от имени админа. :-[

      Если кто знает, то рассказывайте.
      Ответить
      • а новое winapi не предоставляет функций "взять текущего пользователя, проверить тип его учетной записи"?
        Ответить
    • Зато метод универсальный. Можно даже на *nix переделать, если путь исправить.
      Ответить
      • А ничего что файл с таким именем возможно существует?..
        Ответить
        • А ничего, что после finally файла с таким именем возможно уже не будет?
          Ответить
          • это еще фигня
            индус албанец его сначала обрежет по начальному кластеру

            Hello! I'm Aldo a 21y old computer science student from Albania.
            Started programming at the age of 13 when presented with the Turbo Pascal 7 IDE.
            Currently working in various projects mostly using Delphi and PHP.

            о, как!
            Ответить
            • Что-то мало, всего лишь строка «Sample». Я бы гигабайтный массив, сгенерированный через Random, туда записал для надёжности.
              Ответить
              • мм, помнится, был какой-то научно обдуманный перемагничивающий паттерн
                Ответить
      • 'C:\program files\test.txt'
        Очень универсально. Особенно подходит для юникс. Ага... :D
        Ответить
        • :> Можно даже на *nix переделать, если путь исправить
          Ответить
          • Ненужно ничего переделывать.
            'C:\program files' - пока этот путь получают не из системной функции - это говнокод.

            "test.txt" - а тут нужно было бы придумать что-нибудь по оригинальнее, что-бы точно названия файлов не совпали.
            Ответить
    • Ну не знает народ про %WinDir%, %ProgramFiles%, %AppData%, %temp% ну или код тестовый:)
      для таких все по-умолчанию оставлять стараюсь. у меня только %temp% нестандартный - B:\Temp, который Ram-drive.
      Ответить
      • А про проверку прав - можно еще в реестре в HKLM попробовать ключики посоздавать:)
        Ответить
      • Реально запихнуть файл подкачки в ramdrive ? :D
        Ответить
        • Говорят, когда-то он на дискету залезал. Эх, как хорошо было, когда оперативы не хватало!
          Ответить
          • пардон муа, но когда компы были без HDD (только с FDD) то CPU не умели paging адресацию, и никакого свапа в помине не было
            Ответить
            • Мусьё. Гуглите оверлеи.
              И да... Своп может быть не только на диск, но и в верхнюю память, типа XMS, EMS и тд.
              И даже, я где-то видел драйвер для линукса, свопающий в видеопамять, тк она не сильно используется, когда в игры не играешь...
              Ответить
              • речь шла о PC@x86:)

                по-умолчанию именно он лежит в контексте моей головы

                зы: своп НЕ МОЖЕТ БЫТЬ без поддержки страничной адресации, по крайней мере на писи
                разве нет?
                Ответить
                • Все выше перечисленное в моем посте - про PC x86.
                  Ответить
                  • так) давайте по пунктам

                    1) оверлеи это НЕ свап.
                    2) куда бы ни была загрузка (на диск или на луну) без страничной адресации свап не возможен

                    внимание, вопрос: к чему был Ваш пост"?
                    Ответить
                    • >оверлеи это НЕ свап.
                      Смотря что вы под свопом понимаете. В простейшем случае - свап.
                      Ответить
                      • свап -- возможность выгрузить на диск часть памяти в тайне от программы
                        и оттуда же ее загрузить

                        в случае же оверлея программа грузилась кусками по собственному желанию
                        нет?
                        Ответить
                        • Где вы нашли определение свапа и наличие в нем тайны?

                          В любом случае в паскале свап работал в тайне от программиста. Программисту лишь в ручную нужно было поделить программу на модули. О свапе заботился компиялтор.
                          Ответить
                        • >возможность выгрузить на диск
                          Это точно не относится к определению свапа.
                          Ответить
                        • >в тайне от программы
                          Очень какоето неформальное определение у вас. Сами придумали?
                          Ответить
                • XMS, EMS действительно во времена отсутсвия страничной адресации не было, но это на 86-286. Дальше уже было.
                  И помоему, на 286 организовать подкачку всеже можно было.
                  Ответить
                  • 286 был 1 метр памяти адресуемый
                    нафига там свап?
                    Ответить
                    • Кэп намекает, как бы: когда памяти мало - начинают использовать свап.

                      А вот когда её достаточно - неужели пора начинать использовать свап? :D
                      Ответить
                      • нельзя использовать больше адресуемой памяти
                        даже если она вся в свапе

                        если все адресное пространство влезает в RAM целиком
                        и нет многозадачности
                        зачем свап?

                        хотя оверлей тут конечно помжет, да
                        Ответить
                        • Я уже объяснил. Повторяться не буду. Вы не программировали под DOS? Забудте это как страшный сон. Вам это больше не нужно. На дворе 21 век.
                          Ответить
                          • Я помню, как в турбопасе делал асмовставки. Написать на асме большой кусок меня не хватало, адресация двумя частично перекрывающимися регистрами выносила мне мозг, такую адресацию мог придумать только больной, мне кажется.
                            Ответить
                            • Вы вероятно говорите о дальней адресации: в одном регистре сегмент.
                              в другом -- смещение.

                              но оба регистра были по 16 бит и адресовали соответственно 2^16. а памяти было по меньше, и потому они перекрывались, тоесть один кусок памяти был доступен по двум разным адресам.

                              некоторые люди этим пользовались, что бы лишний раз не менять значение регистра (вот такие были оптимизаторы!)

                              с этим связан забавный случай, про который Вы можете узнать нагуглив "A20 gate" )
                              Ответить
                              • > а памяти было по меньше, и потому они перекрывались

                                Ну а что мешало не перекрывать их? Ну пусть они могут адресовать лишнее, что такого? Ну бред же перекрывать их.

                                > с этим связан забавный случай, про который Вы можете узнать нагуглив "A20 gate" )

                                А, это про то, что можно за мегабайт адресовать почти один сегмент? Я попробовал этим воспользоваться, но походу, в НТВДМ это не катит.
                                Ответить
                                • >>Ну а что мешало не перекрывать их
                                  хардварно так было сделано. Линию-то надо было куда-то воткнуть.

                                  >> в НТВДМ это не катит.
                                  может быть в V86 это не работает
                                  только в real
                                  Ответить
                                • >>"A20 gate"
                                  >А, это про то, что можно за мегабайт адресовать почти один сегмент?

                                  Нет. A20 - включение адресации, через порт контролера клавиатуры, к верхней памяти(HMA). Мегабайтные сегменты - не в ту степь.
                                  Ответить
                                • Ожидал Вас здесь увидеть. :)
                                  Ответить
                        • Кажется, в те времена 128Кб оперативы считалось ничё так.
                          Ответить
                          • всем хватит 640 кб памяти (с) ))

                            на самом деле во времена 286го вполне можно было встретить писюк с метром памяти
                            Ответить
                            • А можно было встретить и с полуметром.
                              Ответить
                • Помните, что PC@x86 - это даже относительно современные компы, в том числе и компы от 386, а там свап в рамках страничной адресации возможен.
                  Ответить
                  • ну свапят же страницу
                    без страницы даже дескриптора нет: негде хранить инфу что она загружена или выгружена
                    Ответить
                    • В защещенном режиме 286 есть описатель сегмента(селектор). Вполне можно целым сегментом свапить, хотя как то стремно даже мне.

                      Впрочем это не мешает воспользоваться методом оверлея.
                      Ответить
        • http://www.acard.com.tw/english/fb01-product.jsp?prod_no=ANS-9010S&type1_title=%20Solid%20State%20Dri ve&type1_idno=13&idno_no=333
          Ответить
        • да, но не советуют.
          Ответить
          • В баню разведчиков-советчиков.)) Как это сделать?
            Ответить
            • убиться об стену
              Ответить
            • посмотрите лучше
              http://www.comp-forum.ru/showthread.php?t=2532
              в начале правда советы детские какие-то:)
              Ответить
            • можно попробовать в свойствах системы - дополнительно - быстродействие - дополнительно - виртуальная память.
              (это в ХР)
              Ответить
    • var f:textfile;
      begin
      if not FileExists(SaveDialog.FileName) then begin
      Assignfile(f, SaveDialog.FileName);
      rewrite(f); closefile(f);
      if not FileExists(SaveDialog.FileName) then
      raise Exception.Create('Error: Can`t create file. ');
      end;

      Вот такой вот способ создания файла. Как по-вашему, говнокод?
      end;
      Ответить
      • блин, последний end не туда перепрыгнул)
        Ответить

    Добавить комментарий