1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| DEVICE_OBJECT* CreateDevice(WCHAR* DeviceName, WCHAR* LinkName, DRIVER_OBJECT* DriverObject, BOOLEAN IsDeviceExclusive) { NTSTATUS Status; UNICODE_STRING v1; UNICODE_STRING v2; DEVICE_OBJECT* DeviceObject = NULL; PDEVICE_EXTENSION DeviceExtension;
RtlInitUnicodeString(&v1, DeviceName); RtlInitUnicodeString(&v2, LinkName);
Status = IoCreateDevice( DriverObject, sizeof(DEVICE_EXTENSION), &v1, FILE_DEVICE_UNKNOWN, 0, IsDeviceExclusive, &DeviceObject); if (NT_SUCCESS(Status) == FALSE) { return NULL; }
DeviceExtension = (PDEVICE_EXTENSION)DeviceObject->DeviceExtension; DeviceExtension->chDriver = '\0'; DeviceExtension->pFSDeviceObject = NULL; DeviceExtension->DeviceType = MAIN_CTRL;
DeviceObject->Flags |= DO_BUFFERED_IO;
Status = IoCreateSymbolicLink(&v2, &v1); if (NT_SUCCESS(Status) == FALSE) { IoDeleteDevice(DeviceObject); return NULL; }
return DeviceObject; }
|