Здравствуйте, 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 );