3 /* ===============================================================
10 KSDDKAPI NTSTATUS NTAPI
12 IN PUNICODE_STRING SymbolicLink
,
13 IN PKSPIN_MEDIUM Medium
,
14 IN ULONG PinDirection
)
17 return STATUS_UNSUCCESSFUL
;
24 KSDDKAPI NTSTATUS NTAPI
26 IN PDEVICE_OBJECT DeviceObject
,
29 PIO_STACK_LOCATION IoStack
;
30 NTSTATUS Status
= STATUS_SUCCESS
;
32 IoStack
= IoGetCurrentIrpStackLocation(Irp
);
34 DPRINT1("KsDefaultDispatchPnp entered with func %x\n", IoStack
->MinorFunction
);
36 switch(IoStack
->MinorFunction
)
38 case IRP_MN_QUERY_DEVICE_RELATIONS
:
39 Irp
->IoStatus
.Information
= 0;
40 Irp
->IoStatus
.Status
= STATUS_INSUFFICIENT_RESOURCES
;
41 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
42 return STATUS_INSUFFICIENT_RESOURCES
;
43 case IRP_MN_REMOVE_DEVICE
:
45 // destroy device header, detach device and delete device
46 case IRP_MN_START_DEVICE
:
47 case IRP_MN_QUERY_REMOVE_DEVICE
:
48 case IRP_MN_CANCEL_STOP_DEVICE
:
49 case IRP_MN_SURPRISE_REMOVAL
:
50 Irp
->IoStatus
.Information
= 0;
51 Irp
->IoStatus
.Status
= STATUS_SUCCESS
;
52 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
53 return STATUS_SUCCESS
;
55 Irp
->IoStatus
.Information
= 0;
56 Irp
->IoStatus
.Status
= STATUS_UNSUCCESSFUL
;
57 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
58 //Status = IoCallDriver(NULL /* PnpBaseObject */, Irp);
68 KsSetDevicePnpAndBaseObject(
69 IN KSDEVICE_HEADER Header
,
70 IN PDEVICE_OBJECT PnpDeviceObject
,
71 IN PDEVICE_OBJECT BaseDevice
)
79 KSDDKAPI NTSTATUS NTAPI
80 KsDefaultDispatchPower(
81 IN PDEVICE_OBJECT DeviceObject
,
86 Irp
->IoStatus
.Status
= STATUS_UNSUCCESSFUL
;
87 Irp
->IoStatus
.Information
= 0;
88 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
89 return STATUS_UNSUCCESSFUL
;
97 IN KSOBJECT_HEADER Header
,
98 IN PFNKSCONTEXT_DISPATCH PowerDispatch OPTIONAL
,
99 IN PVOID PowerContext OPTIONAL
)
107 KSDDKAPI NTSTATUS NTAPI
108 KsReferenceBusObject(
109 IN KSDEVICE_HEADER Header
)
112 return STATUS_UNSUCCESSFUL
;
119 KsDereferenceBusObject(
120 IN KSDEVICE_HEADER Header
)
128 KSDDKAPI NTSTATUS NTAPI
129 KsFreeObjectCreateItem(
130 IN KSDEVICE_HEADER Header
,
131 IN PUNICODE_STRING CreateItem
)
134 return STATUS_UNSUCCESSFUL
;
140 KSDDKAPI NTSTATUS NTAPI
141 KsFreeObjectCreateItemsByContext(
142 IN KSDEVICE_HEADER Header
,
146 return STATUS_UNSUCCESSFUL
;
152 KSDDKAPI NTSTATUS NTAPI
155 IN POOL_TYPE PoolType
,
156 IN ULONG_PTR ResourceName
,
157 IN ULONG ResourceType
,
159 OUT PULONG ResourceSize
)
162 return STATUS_UNSUCCESSFUL
;
170 IN PDRIVER_OBJECT DriverObject
)
178 KSDDKAPI NTSTATUS NTAPI
179 KsPinDataIntersectionEx(
183 IN ULONG DescriptorsCount
,
184 IN
const KSPIN_DESCRIPTOR
* Descriptor
,
185 IN ULONG DescriptorSize
,
186 IN PFNKSINTERSECTHANDLEREX IntersectHandler OPTIONAL
,
187 IN PVOID HandlerContext OPTIONAL
)
190 return STATUS_UNSUCCESSFUL
;
196 KSDDKAPI PDEVICE_OBJECT NTAPI
197 KsQueryDevicePnpObject(
198 IN KSDEVICE_HEADER Header
)
208 KsRecalculateStackDepth(
209 IN KSDEVICE_HEADER Header
,
210 IN BOOLEAN ReuseStackLocation
)
219 KsSetTargetDeviceObject(
220 IN KSOBJECT_HEADER Header
,
221 IN PDEVICE_OBJECT TargetDevice OPTIONAL
)
231 IN KSOBJECT_HEADER Header
,
232 IN KSTARGET_STATE TargetState
)
240 IN PDEVICE_OBJECT DeviceObject
,
244 PIO_STATUS_BLOCK IoStatusBlock
= (PIO_STATUS_BLOCK
)Context
;
246 IoStatusBlock
->Information
= Irp
->IoStatus
.Information
;
247 IoStatusBlock
->Status
= Irp
->IoStatus
.Status
;
249 return STATUS_SUCCESS
;
258 KsSynchronousIoControlDevice(
259 IN PFILE_OBJECT FileObject
,
260 IN KPROCESSOR_MODE RequestorMode
,
266 OUT PULONG BytesReturned
)
268 PDEVICE_OBJECT DeviceObject
;
271 IO_STATUS_BLOCK IoStatusBlock
;
272 PIO_STACK_LOCATION IoStack
;
275 /* check for valid file object */
277 return STATUS_INVALID_PARAMETER
;
279 /* get device object to send the request to */
280 DeviceObject
= IoGetRelatedDeviceObject(FileObject
);
282 return STATUS_UNSUCCESSFUL
;
284 /* initialize the event */
285 KeInitializeEvent(&Event
, NotificationEvent
, FALSE
);
288 Irp
= IoBuildDeviceIoControlRequest(IoControl
, DeviceObject
, InBuffer
, InSize
, OutBuffer
, OutSize
, FALSE
, &Event
, &IoStatusBlock
);
291 IoStack
= IoGetNextIrpStackLocation(Irp
);
292 IoStack
->FileObject
= FileObject
;
294 IoSetCompletionRoutine(Irp
, CompletionRoutine
, (PVOID
)&IoStatusBlock
, TRUE
, TRUE
, TRUE
);
296 Status
= IoCallDriver(DeviceObject
, Irp
);
297 if (Status
== STATUS_PENDING
)
299 KeWaitForSingleObject(&Event
, Executive
, RequestorMode
, FALSE
, NULL
);
300 Status
= IoStatusBlock
.Status
;
303 *BytesReturned
= IoStatusBlock
.Information
;
314 KsAcquireDeviceSecurityLock(
315 IN KSDEVICE_HEADER DevHeader
,
316 IN BOOLEAN Exclusive
)
319 PKSIDEVICE_HEADER Header
= (PKSIDEVICE_HEADER
)DevHeader
;
321 KeEnterCriticalRegion();
325 Status
= ExAcquireResourceExclusiveLite(&Header
->SecurityLock
, TRUE
);
329 Status
= ExAcquireResourceSharedLite(&Header
->SecurityLock
, TRUE
);
339 KsReleaseDeviceSecurityLock(
340 IN KSDEVICE_HEADER DevHeader
)
342 PKSIDEVICE_HEADER Header
= (PKSIDEVICE_HEADER
)DevHeader
;
344 ExReleaseResourceLite(&Header
->SecurityLock
);
345 KeLeaveCriticalRegion();