Первый драйвер и засада

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by FalseMaster, 2 Sep 2012.

Thread Status:
Not open for further replies.
  1. FalseMaster

    FalseMaster New Member

    Joined:
    2 Sep 2012
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Вот дожил до того, что припёрло написать драйвер. После пары синек проверил (DbgPrint/DebugView) в обработчике "IRP_MJ_DEVICE_CONTROL" поле "Tail.Overlay.CurrentStackLocation", а там NULL. Другими словами, при формировании пакета запроса почему-то не выделяется стёк. Вроде всё делал как пишут в интернетах. Если не трудно, гляньте, может я что-то напутал.

    создание устр-ва:
    Code:
    RtlInitUnicodeString(&usDevName, "\Device\<имя устр-ва>");
    IoCreateDevice(DriverObject, 0, &usDevName, FILE_DEVICE_UNKNOWN, 0, FALSE, &pdo);
    RtlInitUnicodeString(&usLinkName, "\??\<имя устр-ва>");
    IoCreateSymbolicLink(&usLinkName, &usDevName);
    
    открытие устр-ва:
    Code:
    hFile = CreateFileA("\\.\<имя устр-ва>", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
    
    обращение к устр-ву:
    Code:
    // 0x22E00F = CTL_CODE(FILE_DEVICE_UNKNOWN, 0x0803, METHOD_NEITHER, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
    DeviceIoControl(hFile, 0x22E00F, &in_buf, 4, &out_buf, 4, &tmp);
    
    METHOD_NEITHER на METHOD_BUFFERED менял - та же петрушка, хотя адрес в "AssociatedIrp.SystemBuffer" вполне допустимый (0x8???????), но читать/писать не рискнул, а вот в первом варианте "UserBuffer"=NULL.
     
    #1 FalseMaster, 2 Sep 2012
    Last edited: 2 Sep 2012
  2. FalseMaster

    FalseMaster New Member

    Joined:
    2 Sep 2012
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Проблему решил. Тему фтопку.
     
Thread Status:
Not open for further replies.