NtQueryInformationProcess не будет работать в Visual Studio 2010 - PullRequest
0 голосов
/ 13 августа 2011

У меня странная проблема, с которой я не сталкивался раньше, я должен упомянуть, что моим основным языком программирования является delphi, а не c ++, и я могу сделать глупую ошибку и не осознавать ее.

У меня естьследующий код:

ULONG myret;
PROCESS_BASIC_INFORMATION PRC;
...
NtQueryInformationProcess(hProcess,ProcessBasicInformation,(PVOID)(&PRC),sizeof(PROCESS_BASIC_INFORMATION),(PULONG)(&myret));
...

Я получаю следующее сообщение об ошибке:

GetCommandArgs.obj: ошибка LNK2019: неразрешенный внешний символ _NtQueryInformationProcess @ 20, указанный в функции _wmain

В чем проблема?Большое спасибо.

1 Ответ

5 голосов
/ 13 августа 2011

Это по замыслу. Microsoft не очень-то рада, что ей пришлось документировать эту функцию, что было вызвано решением Министерства юстиции. Это ясно прописано в статье MSDN:

Функция NtQueryInformationProcess и ее структуры возвраты являются внутренними для операционной системы и могут быть изменены из одного выпуска Windows в другой. Для поддержания совместимости вашего приложения, лучше использовать публичные функции, упомянутые в вместо этого описание параметра ProcessInformationClass.

Если вы используете NtQueryInformationProcess, получите доступ к функции через динамическое связывание во время выполнения. Это дает вашему коду возможность ответьте изящно, если функция была изменена или удалена из операционная система. Изменения подписи, однако, не могут быть прощупывается.

Эта функция не имеет связанной библиотеки импорта. Вы должны использовать Функции LoadLibrary и GetProcAddress для динамической ссылки на Ntdll.dll.

Последняя строка говорит вам, что вы должны сделать. Первая строка говорит вам, почему вы не должны.

...