}
/*
- @unimplemented
+ @implemented
*/
KSDDKAPI
VOID
KsAcquireDevice(
IN PKSDEVICE Device)
{
- UNIMPLEMENTED
+ IKsDevice *KsDevice;
+ PKSIDEVICE_HEADER DeviceHeader = (PKSIDEVICE_HEADER)CONTAINING_RECORD(Device, KSIDEVICE_HEADER, KsDevice);
+
+ /* get device interface*/
+ KsDevice = (IKsDevice*)&DeviceHeader->lpVtblIKsDevice;
+
+ /* acquire device mutex */
+ KsDevice->lpVtbl->AcquireDevice(KsDevice);
+}
+
+/*
+ @implemented
+*/
+VOID
+NTAPI
+KsReleaseDevice(
+ IN PKSDEVICE Device)
+{
+ IKsDevice *KsDevice;
+ PKSIDEVICE_HEADER DeviceHeader = (PKSIDEVICE_HEADER)CONTAINING_RECORD(Device, KSIDEVICE_HEADER, KsDevice);
+
+ /* get device interface*/
+ KsDevice = (IKsDevice*)&DeviceHeader->lpVtblIKsDevice;
+
+ /* release device mutex */
+ KsDevice->lpVtbl->ReleaseDevice(KsDevice);
}
+/*
+ @implemented
+*/
+KSDDKAPI
+VOID
+NTAPI
+KsTerminateDevice(
+ IN PDEVICE_OBJECT DeviceObject)
+{
+ IKsDevice *KsDevice;
+ PKSIDEVICE_HEADER DeviceHeader;
+ PDEVICE_EXTENSION DeviceExtension = (PDEVICE_EXTENSION)DeviceObject->DeviceExtension;
+
+ /* get device header */
+ DeviceHeader = DeviceExtension->DeviceHeader;
+
+ /* get device interface*/
+ KsDevice = (IKsDevice*)&DeviceHeader->lpVtblIKsDevice;
+
+ /* now free device header */
+ KsFreeDeviceHeader((KSDEVICE_HEADER)DeviceHeader);
+
+ /* release interface when available */
+ if (KsDevice)
+ {
+ /* delete IKsDevice interface */
+ KsDevice->lpVtbl->Release(KsDevice);
+ }
+}
+
+
/*
@unimplemented
@ stdcall KsPinRegisterIrpCompletionCallback(ptr ptr)
@ stdcall KsPinRegisterPowerCallbacks(ptr ptr ptr)
@ stdcall KsPinReleaseProcessingMutex(ptr)
-;@ stdcall KsPinSetPinClockTime(ptr long)
+@ stdcall KsPinSetPinClockTime(ptr double)
@ stdcall KsPinSubmitFrame(ptr ptr long ptr ptr)
@ stdcall KsPinSubmitFrameMdl(ptr ptr ptr ptr)
@ stdcall KsProbeStreamIrp(ptr long long)
@ stdcall KsServiceBusEnumCreateRequest(ptr ptr)
@ stdcall KsServiceBusEnumPnpRequest(ptr ptr)
@ stdcall KsSetDefaultClockState(ptr long)
-;@ stdcall KsSetDefaultClockTime(ptr long)
+@ stdcall KsSetDefaultClockTime(ptr double)
@ stdcall KsSetDevicePnpAndBaseObject(ptr ptr ptr)
@ stdcall KsSetInformationFile(ptr ptr long long)
@ stdcall KsSetMajorFunctionHandler(ptr long)
@ stdcall KsStreamPointerGetMdl(ptr)
@ stdcall KsStreamPointerGetNextClone(ptr)
@ stdcall KsStreamPointerLock(ptr)
-;@ stdcall KsStreamPointerScheduleTimeout(ptr ptr longlong)
+@ stdcall KsStreamPointerScheduleTimeout(ptr ptr double)
@ stdcall KsStreamPointerSetStatusCode(ptr long)
@ stdcall KsStreamPointerUnlock(ptr long)
@ stdcall KsSynchronousIoControlDevice(ptr long long ptr long ptr long ptr)