9 IN PDRIVER_OBJECT Driver
,
10 IN PUNICODE_STRING Registry_path
13 DPRINT1("ks.sys loaded\n");
14 return STATUS_SUCCESS
;
23 KsGetDeviceForDeviceObject(
24 IN PDEVICE_OBJECT FunctionalDeviceObject
)
37 IN PDEVICE_OBJECT FunctionalDeviceObject
,
38 IN PDEVICE_OBJECT PhysicalDeviceObject
,
39 IN PDEVICE_OBJECT NextDeviceObject
,
40 IN
const KSDEVICE_DESCRIPTOR
* Descriptor OPTIONAL
)
42 return STATUS_UNSUCCESSFUL
;
52 IN PDRIVER_OBJECT DriverObject
,
53 IN PDEVICE_OBJECT PhysicalDeviceObject
,
54 IN
const KSDEVICE_DESCRIPTOR
* Descriptor OPTIONAL
,
55 IN ULONG ExtensionSize OPTIONAL
,
56 OUT PKSDEVICE
* Device OPTIONAL
)
58 NTSTATUS Status
= STATUS_DEVICE_REMOVED
;
59 PDEVICE_OBJECT FunctionalDeviceObject
= NULL
;
60 PDEVICE_OBJECT OldHighestDeviceObject
;
63 ExtensionSize
= sizeof(PVOID
);
65 Status
= IoCreateDevice(DriverObject
, ExtensionSize
, NULL
, FILE_DEVICE_KS
, FILE_DEVICE_SECURE_OPEN
, FALSE
, &FunctionalDeviceObject
);
66 if (!NT_SUCCESS(Status
))
69 OldHighestDeviceObject
= IoAttachDeviceToDeviceStack(FunctionalDeviceObject
, PhysicalDeviceObject
);
70 if (OldHighestDeviceObject
)
72 Status
= KsInitializeDevice(FunctionalDeviceObject
, PhysicalDeviceObject
, OldHighestDeviceObject
, Descriptor
);
75 if (!NT_SUCCESS(Status
))
77 if (OldHighestDeviceObject
)
78 IoDetachDevice(OldHighestDeviceObject
);
80 IoDeleteDevice(FunctionalDeviceObject
);
86 *Device
= KsGetDeviceForDeviceObject(FunctionalDeviceObject
);
99 IN PDRIVER_OBJECT DriverObject
,
100 IN PDEVICE_OBJECT PhysicalDeviceObject
)
102 PKSDEVICE_DESCRIPTOR
*DriverObjectExtension
;
103 PKSDEVICE_DESCRIPTOR Descriptor
= NULL
;
105 DriverObjectExtension
= IoGetDriverObjectExtension(DriverObject
, (PVOID
)KsAddDevice
);
106 if (DriverObjectExtension
)
108 Descriptor
= *DriverObjectExtension
;
111 return KsCreateDevice(DriverObject
, PhysicalDeviceObject
, Descriptor
, 0, NULL
);
121 IN PDRIVER_OBJECT DriverObject
,
122 IN PUNICODE_STRING RegistryPath
,
123 IN
const KSDEVICE_DESCRIPTOR
*Descriptor OPTIONAL
126 PKSDEVICE_DESCRIPTOR
*DriverObjectExtension
;
131 Status
= IoAllocateDriverObjectExtension(DriverObject
, (PVOID
)KsAddDevice
, sizeof(PKSDEVICE_DESCRIPTOR
), (PVOID
*)&DriverObjectExtension
);
132 if (NT_SUCCESS(Status
))
134 *DriverObjectExtension
= (KSDEVICE_DESCRIPTOR
*)Descriptor
;
137 /* Setting our IRP handlers */
138 //DriverObject->MajorFunction[IRP_MJ_CREATE] = KspDispatch;
139 //DriverObject->MajorFunction[IRP_MJ_PNP] = KspDispatch;
140 //DriverObject->MajorFunction[IRP_MJ_POWER] = KspDispatch;
142 /* The driver-supplied AddDevice */
143 DriverObject
->DriverExtension
->AddDevice
= KsAddDevice
;
145 /* KS handles these */
146 DPRINT1("Setting KS function handlers\n");
147 KsSetMajorFunctionHandler(DriverObject
, IRP_MJ_CLOSE
);
148 KsSetMajorFunctionHandler(DriverObject
, IRP_MJ_DEVICE_CONTROL
);
151 return STATUS_SUCCESS
;