Как получить доступ к драйверу KMDF из клиентского приложения
Я написал образец драйвера KMDF. Я не знаю, правильно ли я все сделал, но видел, как драйвер KMDF печатал сообщение отладки в утилите DebugView - когда я добавил этот драйвер как новое оборудование. Это также обнаружилось как "Образец Устройства" под менеджером устройства.
Теперь я хочу написать пример клиента, который мог бы вызвать этот драйвер, чтобы я мог установить соединение между драйвером и клиентом. Я прочитал, что нам нужно использовать "CreateFile", "DEviceIOControl" и т. Д. Но я не могу начать с этого.
Не могли бы вы рассказать мне о создании примера клиента для доступа к образцу драйвера KMDF?
Мой INF-файл для драйвера выглядит так:
***My INF FILE****
; myshelldriver.INF
; Windows installation file for installing the myshelldriver driver
; Copyright (c) Microsoft Corporation All rights Reserved
;
; Installation Notes:
;
; Using Devcon: Type "devcon install myshelldriver.inf myshelldriver" to install
;
[Version]
Signature="$WINDOWS NT$"
Class=Sample
ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171}
Provider=%MSFT%
DriverVer=09/24/2012,1.0
CatalogFile=myshell.cat
[DestinationDirs]
DefaultDestDir = 12
[ClassInstall32]
Addreg=SampleClassReg
[SampleClassReg]
HKR,,,0,%ClassName%
HKR,,Icon,,-5
[DiskCopyfiles]
wdfmyshelldriver.sys
[SourceDisksNames]
1=%InstDisk%,
[SourceDisksFiles]
Wdfmyshelldriver.sys=1
[Manufacturer]
%MSFT% = DiskDevice,NTAMD64
; For Win2K
[DiskDevice]
%DiskDevDesc% = DiskInstall, wdfmyshelldriver
; For XP and later
[DiskDevice.NTAMD64]
%DiskDevDesc% = DiskInstall, wdfmyshelldriver
[DiskInstall.NT]
CopyFiles = DiskCopyfiles
;;specify that this is the installation
;;for nt based systems.
[DriverInstall.ntx86]
DriverVer=09/24/2012,1.0
CopyFiles=DriverCopyFiles
[DiskInstall.NT.Services]
AddService = wdfmyshelldriver, %SPSVCINST_ASSOCSERVICE%, DiskServiceInst
[DiskServiceInst]
ServiceType = %SERVICE_KERNEL_DRIVER%
StartType = %SERVICE_DEMAND_START%
ErrorControl = %SERVICE_ERROR_NORMAL%
DisplayName = %DiskServiceDesc%
ServiceBinary = %12%\Wdfmyshelldriver.sys
AddReg = DiskAddReg
[DiskAddReg]
HKR, "Parameters", "BreakOnEntry", %REG_DWORD%, 0x00000000
HKR, "Parameters", "DiskSize", %REG_DWORD%, 0x00100000
HKR, "Parameters", "DriveLetter", %REG_SZ%, "R:"
HKR, "Parameters", "RootDirEntries", %REG_DWORD%, 0x00000200
HKR, "Parameters", "SectorsPerCluster", %REG_DWORD%, 0x00000002
[Strings]
MSFT = "Microsoft"
ClassName = "My Shell Device"
DiskDevDesc = "WDF My Shell Driver"
DiskServiceDesc = "myshelldriver Driver"
InstDisk = "myshelldriver Install Disk"
;*******************************************
;Handy macro substitutions (non-localizable)
SPSVCINST_ASSOCSERVICE = 0x00000002
SERVICE_KERNEL_DRIVER = 1
SERVICE_DEMAND_START = 3
SERVICE_ERROR_NORMAL = 1
REG_DWORD = 0x00010001
REG_SZ = 0x00000000
**** END OF INF FILE***
2 ответа
В WDK есть много соответствующих образцов. Например, посмотрите на образец KMDF Echo.
Сначала вам нужно будет назвать свой объект. Во-вторых, вам нужно будет сделать хотя бы одно из следующих действий:
- Создайте символическую ссылку в \GLOBAL??\
- Зарегистрируйте интерфейс устройства.
Вариант 1 позволит вам сделать простое
CreateFile("\\\\.\\<device_name>, ...);
Вариант 2, и вам нужно будет использовать процедуры Setup DI Api, чтобы найти ваше устройство, чтобы открыть его.