Re[3]: Не могу открыть драйвер!
От: okman Беларусь https://searchinform.ru/
Дата: 28.03.12 11:09
Оценка:
Здравствуйте, Konstantinchik.

Вот минимальный рабочий пример (обработка ошибок опущена):
static
NTSTATUS DispatchAny(DEVICE_OBJECT *pDevice, IRP *pIrp)
{
    pIrp->IoStatus.Status      = STATUS_SUCCESS;
    pIrp->IoStatus.Information = 0;
    IoCompleteRequest(pIrp, IO_NO_INCREMENT);
    return STATUS_SUCCESS;
}

NTSTATUS DriverEntry(DRIVER_OBJECT *pDriver, UNICODE_STRING *pRegPath)
{
    UNICODE_STRING  DeviceName;
    UNICODE_STRING  SymLinkName;
    DEVICE_OBJECT   pDevice;

    RtlInitUnicodeString(&DeviceName, L"\\Device\\MyDevice");

    IoCreateDevice(pDriver,
        0,
        &DeviceName,
        FILE_DEVICE_UNKNOWN,
        0,
        FALSE,
        &pDevice);

    RtlInitUnicodeString(&SymLinkName, L"\\??\\MyDeviceSymlink");

    IoCreateSymbolicLink(&SymLinkName, &DeviceName);

    pDriver->MajorFunction[IRP_MJ_CREATE]  = DispatchAny;
    pDriver->MajorFunction[IRP_MJ_CLEANUP] = DispatchAny;
    pDriver->MajorFunction[IRP_MJ_CLOSE]   = DispatchAny;

    return STATUS_SUCCESS;
}

Обращаю внимание на работу со строками (UNICODE_STRING) и имена устройств/символьных ссылок в
ядре и в режиме пользователя (\Device\..., \??\..., \\.\...).
Все, этот драйвер нужно скомпилировать и запустить, после чего в user mode
устройство можно будет открывать по имени \\.\MyDeviceSymlink, т.е.
HANDLE hDevice = CreateFileW(L"\\\\.\\MyDeviceSymlink",
    GENERIC_READ | GENERIC_WRITE,
    FILE_SHARE_READ | FILE_SHARE_WRITE,
    NULL,
    OPEN_EXISTING,
    0,
    NULL);

Ищите несоответствие.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.