Цитата(Friackazoid @ 20.9.2006, 21:06 ) | | но при компиляции выдаеться ошибка что функцию такую вижак знать не знает, хотя хеадер от нее подключен |
Вероятно нужно:
| Код | #define _WIN32_WINNT 0x0500 #define WINVER 0x0500 |
Цитата(Friackazoid @ 20.9.2006, 21:06 ) | | компилятор выдает что не может передать параметры через указатель как это можно сделать. |
Это, я так понимаю, ZwCreateFile Тогда так:
| Код | typedef NTSTATUS (NTAPI *ptr_ZwCreateFile)(OUT PHANDLE FileHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK IoStatusBlock, IN PLARGE_INTEGER AllocationSize OPTIONAL, IN ULONG FileAttributes, IN ULONG ShareAccess, IN ULONG CreateDisposition, IN ULONG CreateOptions, IN PVOID EaBuffer OPTIONAL, IN ULONG EaLength );
ptr_ZwCreateFile OrigProcAdr; ................ return OrigProcAdr(FileHandle, DesiredAccess, ObjectAttributes, IoStatusBlock, AllocationSize, FileAttributes, ShareAccess, CreateDisposition, CreateOptions, EaBuffer, EaLength); |
Цитата(Friackazoid @ 20.9.2006, 21:06 ) | | Как пользоваться флагом о информации запрашиваемой о файле в функции |
Примерно так:| Код | HANDLE FileHandle; IO_STATUS_BLOCK IoStatusBlock; PFILE_NAME_INFORMATION pFileNameInformation = (PFILE_NAME_INFORMATION)malloc(1024);
ZwQueryInformationFile(FileHandle, &IoStatusBlock, pFileNameInformation, 1024, FileNameInformation); |
После выполнения данного кода проверять значение, которое возвратила функция ZwQueryInformationFile, и если это STATUS_BUFFER_OVERFLOW, то увеличить буфер, и вызвать функцию снова. Кроме того, malloc приведён только для примера, т.к. в драйверах свой механизм выделения памяти. |