2 ReactOS Kernel Streaming
10 #define TAG(A, B, C, D) (IN ULONG)(((A)<<0) + ((B)<<8) + ((C)<<16) + ((D)<<24))
15 KSDDKAPI NTSTATUS NTAPI
18 OUT KSRESET
* ResetValue
)
21 return STATUS_UNSUCCESSFUL
;
28 KsAddIrpToCancelableQueue(
29 IN OUT PLIST_ENTRY QueueHead
,
30 IN PKSPIN_LOCK SpinLock
,
32 IN KSLIST_ENTRY_LOCATION ListLocation
,
33 IN PDRIVER_CANCEL DriverCancel OPTIONAL
)
41 KSDDKAPI NTSTATUS NTAPI
42 KsAddObjectCreateItemToDeviceHeader(
43 IN KSDEVICE_HEADER Header
,
44 IN PDRIVER_DISPATCH Create
,
46 IN PWCHAR ObjectClass
,
47 IN PSECURITY_DESCRIPTOR SecurityDescriptor
)
50 return STATUS_UNSUCCESSFUL
;
56 KSDDKAPI NTSTATUS NTAPI
57 KsAddObjectCreateItemToObjectHeader(
58 IN KSOBJECT_HEADER Header
,
59 IN PDRIVER_DISPATCH Create
,
61 IN PWCHAR ObjectClass
,
62 IN PSECURITY_DESCRIPTOR SecurityDescriptor
)
65 return STATUS_UNSUCCESSFUL
;
71 KSDDKAPI NTSTATUS NTAPI
72 KsAllocateDeviceHeader(
73 OUT KSDEVICE_HEADER
* Header
,
75 IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL
)
77 /* Allocates memory for the KSDEVICE_HEADER structure */
80 return STATUS_INVALID_PARAMETER
;
82 Header
= ExAllocatePoolWithTag(PagedPool
, sizeof(KSDEVICE_HEADER
), TAG('H','D','S','K'));
85 return STATUS_INSUFFICIENT_RESOURCES
;
87 /* TODO: Actually do something with the header, perhaps? */
89 return STATUS_SUCCESS
;
97 IN KSDEVICE_HEADER Header
)
102 /* TODO: Free content first */
104 ExFreePoolWithTag(Header
, TAG('H','D','S','K'));
110 KSDDKAPI NTSTATUS NTAPI
114 OUT PVOID
* ExtraBuffer
)
117 return STATUS_UNSUCCESSFUL
;
123 http://www.osronline.com/DDKx/stream/ksfunc_3sc3.htm
125 KSDDKAPI NTSTATUS NTAPI
126 KsAllocateObjectCreateItem(
127 IN KSDEVICE_HEADER Header
,
128 IN PKSOBJECT_CREATE_ITEM CreateItem
,
129 IN BOOLEAN AllocateEntry
,
130 IN PFNKSITEMFREECALLBACK ItemFreeCallback OPTIONAL
)
133 return STATUS_UNSUCCESSFUL
;
139 Initialize the required file context header.
140 Allocates KSOBJECT_HEADER structure.
141 Irp is an IRP_MJ_CREATE structure.
142 Driver must allocate KSDISPATCH_TABLE and initialize it first.
144 http://www.osronline.com/DDKx/stream/ksfunc_0u2b.htm
146 KSDDKAPI NTSTATUS NTAPI
147 KsAllocateObjectHeader(
150 IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL
,
152 IN KSDISPATCH_TABLE
* Table
)
154 /* NOTE: PKSOBJECT_HEADER is not defined yet */
156 PKSOBJECT_HEADER object_header
;
158 /* TODO: Validate parameters */
160 object_header
= ExAllocatePoolWithTag(PagedPool
, sizeof(KSOBJECT_HEADER
), TAG('H','O','S','K'));
162 if ( ! object_header
)
164 return STATUS_INSUFFICIENT_RESOURCES
;
167 (PVOID
)(*Header
) = object_header
;
173 return STATUS_UNSUCCESSFUL
;
183 ExFreePoolWithTag(Header
, TAG('H','O','S','K'));
195 IN OUT PLIST_ENTRY QueueHead
,
196 IN PKSPIN_LOCK SpinLock
)
206 IN PDEVICE_OBJECT DeviceObject
,
215 KSDDKAPI NTSTATUS NTAPI
216 KsDefaultDeviceIoCompletion(
217 IN PDEVICE_OBJECT DeviceObject
,
221 return STATUS_UNSUCCESSFUL
;
227 KSDDKAPI BOOLEAN NTAPI
228 KsDispatchFastIoDeviceControlFailure(
229 IN PFILE_OBJECT FileObject
,
231 IN PVOID InputBuffer OPTIONAL
,
232 IN ULONG InputBufferLength
,
233 OUT PVOID OutputBuffer OPTIONAL
,
234 IN ULONG OutputBufferLength
,
235 IN ULONG IoControlCode
,
236 OUT PIO_STATUS_BLOCK IoStatus
,
237 IN PDEVICE_OBJECT DeviceObject
) /* always return false */
245 KSDDKAPI BOOLEAN NTAPI
246 KsDispatchFastReadFailure(
247 IN PFILE_OBJECT FileObject
,
248 IN PLARGE_INTEGER FileOffset
,
253 OUT PIO_STATUS_BLOCK IoStatus
,
254 IN PDEVICE_OBJECT DeviceObject
) /* always return false */
260 Used in dispatch table entries that aren't handled and need to return
261 STATUS_INVALID_DEVICE_REQUEST.
263 KSDDKAPI NTSTATUS NTAPI
264 KsDispatchInvalidDeviceRequest(
265 IN PDEVICE_OBJECT DeviceObject
,
268 Irp
->IoStatus
.Status
= STATUS_INVALID_DEVICE_REQUEST
;
269 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
271 return STATUS_INVALID_DEVICE_REQUEST
;
277 KSDDKAPI NTSTATUS NTAPI
279 IN PDEVICE_OBJECT DeviceObject
,
282 /* Calls a dispatch routine corresponding to the function code of the IRP */
285 First we need to get the dispatch table. An opaque header is pointed to by
286 FsContext. The first element points to this table. This table is the key
287 to dispatching the IRP correctly.
291 return STATUS_UNSUCCESSFUL
;
297 KSDDKAPI NTSTATUS NTAPI
298 KsDispatchSpecificMethod(
300 IN PFNKSHANDLER Handler
)
303 return STATUS_UNSUCCESSFUL
;
309 KSDDKAPI NTSTATUS NTAPI
310 KsDispatchSpecificProperty(
312 IN PFNKSHANDLER Handler
)
315 return STATUS_UNSUCCESSFUL
;
321 KSDDKAPI NTSTATUS NTAPI
322 KsForwardAndCatchIrp(
323 IN PDEVICE_OBJECT DeviceObject
,
325 IN PFILE_OBJECT FileObject
,
326 IN KSSTACK_USE StackUse
)
329 return STATUS_UNSUCCESSFUL
;
335 KSDDKAPI NTSTATUS NTAPI
338 IN PFILE_OBJECT FileObject
,
339 IN BOOLEAN ReuseStackLocation
)
342 return STATUS_UNSUCCESSFUL
;
348 KSDDKAPI NTSTATUS NTAPI
349 KsGetChildCreateParameter(
351 OUT PVOID
* CreateParameter
)
354 return STATUS_UNSUCCESSFUL
;
360 KSDDKAPI NTSTATUS NTAPI
361 KsMoveIrpsOnCancelableQueue(
362 IN OUT PLIST_ENTRY SourceList
,
363 IN PKSPIN_LOCK SourceLock
,
364 IN OUT PLIST_ENTRY DestinationList
,
365 IN PKSPIN_LOCK DestinationLock OPTIONAL
,
366 IN KSLIST_ENTRY_LOCATION ListLocation
,
367 IN PFNKSIRPLISTCALLBACK ListCallback
,
371 return STATUS_UNSUCCESSFUL
;
377 KSDDKAPI NTSTATUS NTAPI
384 return STATUS_UNSUCCESSFUL
;
390 KSDDKAPI NTSTATUS NTAPI
391 KsQueryInformationFile(
392 IN PFILE_OBJECT FileObject
,
393 OUT PVOID FileInformation
,
395 IN FILE_INFORMATION_CLASS FileInformationClass
)
398 return STATUS_UNSUCCESSFUL
;
404 KSDDKAPI ACCESS_MASK NTAPI
405 KsQueryObjectAccessMask(
406 IN KSOBJECT_HEADER Header
)
409 return STATUS_UNSUCCESSFUL
;
415 KSDDKAPI PKSOBJECT_CREATE_ITEM NTAPI
416 KsQueryObjectCreateItem(
417 IN KSOBJECT_HEADER Header
)
420 /* return STATUS_UNSUCCESSFUL; */
427 KSDDKAPI NTSTATUS NTAPI
429 IN PFILE_OBJECT FileObject
,
430 IN PKEVENT Event OPTIONAL
,
431 IN PVOID PortContext OPTIONAL
,
432 OUT PIO_STATUS_BLOCK IoStatusBlock
,
435 IN ULONG Key OPTIONAL
,
436 IN KPROCESSOR_MODE RequestorMode
)
439 return STATUS_UNSUCCESSFUL
;
446 KsReleaseIrpOnCancelableQueue(
448 IN PDRIVER_CANCEL DriverCancel OPTIONAL
)
457 KsRemoveIrpFromCancelableQueue(
458 IN OUT PLIST_ENTRY QueueHead
,
459 IN PKSPIN_LOCK SpinLock
,
460 IN KSLIST_ENTRY_LOCATION ListLocation
,
461 IN KSIRP_REMOVAL_OPERATION RemovalOperation
)
465 /*return STATUS_UNSUCCESSFUL; */
472 KsRemoveSpecificIrpFromCancelableQueue(
481 KSDDKAPI NTSTATUS NTAPI
482 KsSetInformationFile(
483 IN PFILE_OBJECT FileObject
,
484 IN PVOID FileInformation
,
486 IN FILE_INFORMATION_CLASS FileInformationClass
)
489 return STATUS_UNSUCCESSFUL
;
502 IN PDEVICE_OBJECT DeviceObject
,
505 DPRINT1("KS / Create\n");
506 return STATUS_UNSUCCESSFUL
;
512 IN PDEVICE_OBJECT DeviceObject
,
515 DPRINT1("KS / Close\n");
516 return STATUS_UNSUCCESSFUL
;
522 IN PDEVICE_OBJECT DeviceObject
,
525 DPRINT1("KS / DeviceControl\n");
526 return STATUS_UNSUCCESSFUL
;
532 IN PDEVICE_OBJECT DeviceObject
,
535 DPRINT1("KS / Read\n");
536 return STATUS_UNSUCCESSFUL
;
542 IN PDEVICE_OBJECT DeviceObject
,
545 DPRINT1("KS / Write\n");
546 return STATUS_UNSUCCESSFUL
;
552 IN PDEVICE_OBJECT DeviceObject
,
555 DPRINT1("KS / FlushBuffers\n");
556 return STATUS_UNSUCCESSFUL
;
562 IN PDEVICE_OBJECT DeviceObject
,
565 DPRINT1("KS / QuerySecurity\n");
566 return STATUS_UNSUCCESSFUL
;
572 IN PDEVICE_OBJECT DeviceObject
,
575 DPRINT1("KS / SetSecurity\n");
576 return STATUS_UNSUCCESSFUL
;
583 KsInternalIrpDispatcher(
584 IN PDEVICE_OBJECT DeviceObject
,
587 /* TODO - Nothing implemented really yet! */
589 DPRINT1("KS IRP dispatch function called\n");
591 //PKSDISPATCH_TABLE ks_dispatch_table = NULL;
593 /* ks_dispatch_table is the first element in a structure pointed to by FsContext */
595 switch ( IoGetCurrentIrpStackLocation(Irp
)->MajorFunction
)
598 /* return ks_dispatch_table->Create(DeviceObject, Irp);*/
603 return STATUS_INVALID_PARAMETER
;
611 KSDDKAPI NTSTATUS NTAPI
612 KsSetMajorFunctionHandler(
613 IN PDRIVER_OBJECT DriverObject
,
614 IN ULONG MajorFunction
)
617 Sets a DriverObject's major function handler to point to an internal
618 function we implement.
620 TODO: Deal with KSDISPATCH_FASTIO
623 switch ( MajorFunction
)
627 case IRP_MJ_DEVICE_CONTROL
:
630 case IRP_MJ_FLUSH_BUFFERS
:
631 case IRP_MJ_QUERY_SECURITY
:
632 case IRP_MJ_SET_SECURITY
:
633 DriverObject
->MajorFunction
[MajorFunction
] = KsInternalIrpDispatcher
;
637 return STATUS_INVALID_PARAMETER
; /* is this right? */
640 return STATUS_SUCCESS
;
646 KSDDKAPI NTSTATUS NTAPI
648 IN PFILE_OBJECT FileObject
,
649 IN PKEVENT Event OPTIONAL
,
650 IN PVOID PortContext OPTIONAL
,
651 IN PIO_COMPLETION_ROUTINE CompletionRoutine OPTIONAL
,
652 IN PVOID CompletionContext OPTIONAL
,
653 IN KSCOMPLETION_INVOCATION CompletionInvocationFlags OPTIONAL
,
654 OUT PIO_STATUS_BLOCK IoStatusBlock
,
655 IN OUT PVOID StreamHeaders
,
658 IN KPROCESSOR_MODE RequestorMode
)
661 return STATUS_UNSUCCESSFUL
;
667 KSDDKAPI NTSTATUS NTAPI
669 IN PFILE_OBJECT FileObject
,
670 IN PKEVENT Event OPTIONAL
,
671 IN PVOID PortContext OPTIONAL
,
672 OUT PIO_STATUS_BLOCK IoStatusBlock
,
675 IN ULONG Key OPTIONAL
,
676 IN KPROCESSOR_MODE RequestorMode
)
679 return STATUS_UNSUCCESSFUL
;