Re[3]: Дрова, дровишки...
От: ServerMouse Беларусь  
Дата: 25.07.02 12:51
Оценка:
Здравствуйте 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?
Если человек программист, то это надолго.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.