Хочу в драйвере вызвать ZwQueryInformationProcess. в ntddk.h дописываю: NTSYSAPI NTSTATUS WINAPI ZwQueryInformationProcess( IN HANDLE ProcessHandle, IN DWORD ProcessInformationClass, OUT PVOID ProcessInformation, IN ULONG ProcessInformationLength, OUT PULONG ReturnLength ); (взято из http://msdn.microsoft.com/en-us/library/ms687420.aspx) Получаю: ntddk.h(22316) : error C2061: syntax error : identifier 'ZwQueryInformationProce ss' ntddk.h(22316) : error C2059: syntax error : ';' ntddk.h(22317) : error C2059: syntax error : 'type' mydrv.c(118) : error C4013: 'ZwQueryInformationProcess' undefined; assuming exte rn returning int mydrv.c(119) : error C2065: 'cRaedBuffer' : undeclared identifier mydrv.c(119) : error C2109: subscript requires array or pointer type mydrv.c(120) : error C2109: subscript requires array or pointer type Как правильно прикрутить эту функцию?
NTAPI - тоже самое. Собственно вопрос в том, как работать с функцией не прописаной в ntddk.h. Где-то ведь должно быть указано, что такая-то (напр. ZwQueryInformationProcess) функция импортируется из такой-то библиотеки?!
Ramzey Ну хз. У мну все работает. Стукни в асю (в личке) Причем здесь библиотека, если по ошибке у тебя даже до линковки не дошло?
Aspire Если интересно, когда ставлю NTAPI, то получаю вот что: Compiling - mydrv.c for i386 c:\winddk\2600\inc\ddk\wxp\ntddk.h(22362) : error C2146: syntax error : missing ')' before identifier 'ProcessInformationClass' c:\winddk\2600\inc\ddk\wxp\ntddk.h(22362) : error C2144: syntax error : '<Unknow n>' should be preceded by '<Unknown>' c:\winddk\2600\inc\ddk\wxp\ntddk.h(22362) : error C2144: syntax error : '<Unknow n>' should be preceded by '<Unknown>' c:\winddk\2600\inc\ddk\wxp\ntddk.h(22362) : error C2143: syntax error : missing ')' before 'identifier' c:\winddk\2600\inc\ddk\wxp\ntddk.h(22362) : error C2081: 'DWORD' : name in forma l parameter list illegal c:\winddk\2600\inc\ddk\wxp\ntddk.h(22362) : error C2061: syntax error : identifi er 'ProcessInformationClass' c:\winddk\2600\inc\ddk\wxp\ntddk.h(22362) : error C2059: syntax error : ';' c:\winddk\2600\inc\ddk\wxp\ntddk.h(22362) : error C2059: syntax error : ',' c:\winddk\2600\inc\ddk\wxp\ntddk.h(22366) : error C2059: syntax error : ')' mydrv.c(26) : error C4013: 'DPRINT' undefined; assuming extern returning int mydrv.c(28) : error C4013: 'ZwQueryInformationProcess' undefined; assuming exter n returning int
попробуй убрать NTSYSAPI и WINAPI заменить на __stdcall... а уж NTSTATUS то должен компилятор знать)))))
Код (Text): extern NTSTATUS ZwQueryInformationProcess( IN HANDLE ProcessHandle, IN DWORD ProcessInformationClass, OUT PVOID ProcessInformation, IN ULONG ProcessInformationLength, OUT PULONG ReturnLength ); И не надо ни каких NTSYSAPI, WINAPI и иже с ними...
взбредет компилятору, что там cdecl и все, будет стек убиваться при вызове. поэтому stdcall всеже поставить не мешало бы. да и не просто extern, а extern "C"
Вобщем все ОК. Я вместо ... OUT PULONG ReturnLength OPTIONAL ); писал OUT_OPT PULONG ReturnLength Собственно, так в msnd было. Я на С раньше не писал ничего.