OpenProcess EnumProcessModules GetModuleFileNameExA Так получишь имя процесса по его PID что касается второй части вопроса, имя производителя зашито в секции ресурсов, т.н. Version info имеет ID = 24 (18h) там примерно такая структура: Код (Text): 1 VERSIONINFO FILEVERSION 1,0,0,916 PRODUCTVERSION 1,0,0,0 FILEOS 0x40004 FILETYPE 0x2 { BLOCK "StringFileInfo" { BLOCK "041904B0" { VALUE "CompanyName", "Microsoft Corporation" VALUE "FileDescription", "Калькулятор Плюс для Windows" VALUE "FileVersion", "1.0.0916" VALUE "InternalName", "CALCPLUS" VALUE "LegalCopyright", "© Корпорация Майкрософт. Все права защищены." VALUE "OriginalFilename", "CalcPlus.exe" VALUE "ProductName", "Microsoft® Калькулятор Плюс" VALUE "ProductVersion", "1.0" } } BLOCK "VarFileInfo" { VALUE "Translation", 0x0419 0x04B0 } } Вот отсюда все и прочитаешь. В твоем случае драйвер имеет еще и цифровую подпись, она обычно хранится в оверлее.
хорошее дело. ладно а как получить доступ к секции ресурсов? и как я понял эта секция выгружаеться после инициализации драйвера, тогда будет ли она там?
в нулевом кольце в hal.dll будет он работать? я hal.dll отмодил, только мне еще одну проверку надо вставить, а имеено кто запрощик
Открываешь файл для чтения, читаешь указатель (PE offset = dword) на PE заголовок, он находится по смещению 3ch от начала файла. Далее к началу файла прибавляешь PE offset и стоишь на PE заголовке, далее прибавляешь еще 88h (PE + 88h) и считываешь dword - это есть виртуальный адрес директории ресурсов, размер директории ресурсов находится по смещению (PE + 8Ch). Т.о Имеешь виртуальный адрес и размер директории ресурсов, далее нужно виртуальный адрес преобразовать в физический, для этого нужно определить к какой секции принадлежит виртуальный адрес, как это сделать стоит рассказывать?
почитал. пока читал докапался вот до чего: GetFileVersionInfo() GetFileVersionInfoSize() VerQueryValue() только вот вопрос у меня вот пример VerQueryValue(Buf, PChar('StringFileInfo\040904E4\' + InfoStr), Pointer(Value), Len) 040904E4 <- вот эти циферки везде по разному. как быть?
так значит GetModuleFileNameExA возвращает полный путь. тогда вот остаеться только вопрос о том как с теми циферками что сверху.
EnumProcessModules <- она возвращает иерархию процессов, которые были вызвано до того как была вызван данный процесс?
Вообще я понял что эти цифирки значат. первые четыре язык, оставшиеся кодировка. скажить как мне теперь точно угадать эти цифры, я имею ввиду и кодировку и язык. или надо перебирать все варианты?