AddDevice例程内容如下:
NTSTATUS VA_AddDevice
(
IN PDRIVER_OBJECT driverObj,
IN PDEVICE_OBJECT physicalDevObj
)
{
NTSTATUS status;
PDEVICE_OBJECT filterDevObj = NULL;
PAGED_CODE();
DBGOUT(("VA_AddDevice: 驱动对象=%ph, 物理设备对象=%ph", driverObj, physicalDevObj));
status = IoCreateDevice(
driverObj,
sizeof(struct DEVICE_EXTENSION),
NULL, // name for this device
FILE_DEVICE_MOUSE,
0, // device characteristics
FALSE, // not exclusive
&filterDevObj); // our device object
if ( NT_SUCCESS(status) ){
struct DEVICE_EXTENSION *devExt;
ASSERT( filterDevObj );
/*
* Initialize device extension for new device object
*/
devExt = ( struct DEVICE_EXTENSION * )filterDevObj->DeviceExtension;
RtlZeroMemory( devExt, sizeof(struct DEVICE_EXTENSION) );
devExt->signature = DEVICE_EXTENSION_SIGNATURE;
devExt->state = STATE_INITIALIZED;
devExt->filterDevObj = filterDevObj;
devExt->physicalDevObj = physicalDevObj;
devExt->pendingActionCount = 0;
KeInitializeEvent( &devExt->removeEvent, NotificationEvent, FALSE );
#ifdef HANDLE_DEVICE_USAG