Re[3]: IOCTL драйвер вне стека
От: Аноним  
Дата: 04.10.04 06:39
Оценка:
Здравствуйте, ArtSh, Вы писали:

AS>Здравствуйте, TarasCo, Вы писали:



TC>>IOCTL_SERIAL_SET_BAUD_RATE

TC>>IOCTL_SERIAL_SET_LINE_CONTROL

TC>>NTSTATUS

TC>>NtDeviceIoControlFile(
TC>> IN HANDLE FileHandle,
TC>> IN HANDLE Event OPTIONAL,
TC>> IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
TC>> IN PVOID ApcContext OPTIONAL,
TC>> OUT PIO_STATUS_BLOCK IoStatusBlock,
TC>> IN ULONG IoControlCode,
TC>> IN PVOID InputBuffer OPTIONAL,
TC>> IN ULONG InputBufferLength,
TC>> OUT PVOID OutputBuffer OPTIONAL,
TC>> IN ULONG OutputBufferLength
TC>> );

AS>Эта функция описана НЕ в DDK, а в Platform SDK, хотя в библиотеках она есть, как же её использовать в режиме ядра?

AS>И в чем отличие от функции ZwDeviceIoControlFile, которая не описана нигде, хотя в библиотеках она тоже есть?

NtDeviceIoControlFile — это экспорт ядра (если не верите — посмортите в таблицу экспортов ntoskrn.exe), ZwDeviceIoControlFile просто псевдоним той же функции, две разных строчки в таблице экспорта ссылаются на одну и туже функцию. Такчто без разницы Zw... или Nt.... нет никакой.

То, что вы видели в SDK — это экспорт ntdll.dll, предназначенный для вызова через шлюз соответствующей функции режима ядра. Библиотеки пользовательского режима Вам не нужны. Если у Вас есть DDK, в нем есть библиотеки экспорта ядра, но нет заголовочных файлов с объявлениями недокументированных функций. Просто объявите ее сами. Например так:

NTSYSAPI
NTSTATUS
NTAPI
NtDeviceIoControlFile(
IN HANDLE FileHandle,
IN HANDLE Event OPTIONAL,
IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
IN PVOID ApcContext OPTIONAL,
OUT PIO_STATUS_BLOCK IoStatusBlock,
IN ULONG IoControlCode,
IN PVOID InputBuffer OPTIONAL,
IN ULONG InputBufferLength,
OUT PVOID OutputBuffer OPTIONAL,
IN ULONG OutputBufferLength );
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.