Здравствуйте vasketsov, Вы писали:
V>Здравствуйте ServerMouse, Вы писали:
SM>>Да, и ошибка-то: IRQL_NOT_LESS_OR_EQUAL.
V>Значится так.
V>1)
SM>> fileName.Buffer = NULL;
SM>> fileName.Length = 0;
SM>> fileName.MaximumLength = sizeof(DEFAULT_LOG_FILE_NAME) + sizeof(UNICODE_NULL);
SM>> fileName.Buffer = ExAllocatePool(PagedPool,
SM>> fileName.MaximumLength);
SM>> if (!fileName.Buffer) return FALSE;
SM>>
SM>> RtlZeroMemory(fileName.Buffer, fileName.MaximumLength);
SM>> status = RtlAppendUnicodeToString(&fileName, (PWSTR)DEFAULT_LOG_FILE_NAME);
V>Ну и порно... RtlInitUnicodeString(&fileName,DEFAULT_LOG_FILE_NAME).
V>или прямо руками
V>fileName.Buffer = DEFAULT_LOG_FILE_NAME;
V>fileName.Length = wcslen(DEFAULT_LOG_FILE_NAME)*sizeof(WCHAR);
V>fileName.MaximumLength = fileName.Length +sizeof(WCHAR);
V>и DEFAULT_LOG_FILE_NAME опиши не через define, а как WCHAR DEFAULT_LOG_FILE_NAME[] = L"\\Device\\HarddiskVolume1\\...";
Ну это вообщем-то я из NTDDK\src\ выдрал. Мой начальный код был куда короче и лаконичней.
А ошибку-то я понял. Это код фильтра клавиатуры. И запись в лог я пытался делать из обработчика IRQ клавы. А так низя-низя-низя! Сейчас работает примерно так:
NTSTATUS CtrlDispatchRead(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp )
{
//............
RetStatus=IoCallDriver( devExt->TopOfStack, Irp );
LogMessage("Key %x\n",ch);
return RetStatus;
}
V>3) у тебя IRQL PASSIVE_LEVEL ?
А что это? Я просто сегодня первый день как за драйверы сел, так что не бейте сильно ногами...
Мне надо драйвером блокировать/разблокировать клавиатуру и мышь.
Люди, ещё посоветуйте как лучше наладить связь с программой из User-mode?