diff options
| author | Adonais Romero González <[email protected]> | 2019-01-09 15:40:48 -0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2019-01-09 15:40:48 -0800 |
| commit | 0e4c634898f02a512046957bf92adb49f03dd02c (patch) | |
| tree | c733905bcf562e27a7245b6799317eae3f01e582 /general/SimpleMediaSource/SimpleMediaSourceDriver/Device.c | |
| parent | 693d7cc6da06e374a0931123f0b5d8c29c945b97 (diff) | |
| parent | 94f38da770fd3c00e4ee62c983d92c769c80c6c9 (diff) | |
Merge pull request #326 from BenPYeh/custom_media_source
Custom media source
Diffstat (limited to 'general/SimpleMediaSource/SimpleMediaSourceDriver/Device.c')
| -rw-r--r-- | general/SimpleMediaSource/SimpleMediaSourceDriver/Device.c | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/general/SimpleMediaSource/SimpleMediaSourceDriver/Device.c b/general/SimpleMediaSource/SimpleMediaSourceDriver/Device.c new file mode 100644 index 00000000..083cf3c7 --- /dev/null +++ b/general/SimpleMediaSource/SimpleMediaSourceDriver/Device.c @@ -0,0 +1,109 @@ +/*++ + +Module Name: + + device.c - Device handling events for example driver. + +Abstract: + + This file contains the device entry points and callbacks. + +Environment: + + User-mode Driver Framework 2 + +--*/ + +#include "driver.h" +#include "device.tmh" + +GUID CAMERA_CATEGORY = { STATIC_KSCATEGORY_VIDEO_CAMERA }; +GUID CAPTURE_CATEGORY = { STATIC_KSCATEGORY_CAPTURE }; +GUID VIDEO_CATEGORY = { STATIC_KSCATEGORY_VIDEO }; + +NTSTATUS +SimpleMediaSourceDriverCreateDevice( + _Inout_ PWDFDEVICE_INIT DeviceInit + ) +/*++ + +Routine Description: + + Worker routine called to create a device and its software resources. + +Arguments: + + DeviceInit - Pointer to an opaque init structure. Memory for this + structure will be freed by the framework when the WdfDeviceCreate + succeeds. So don't access the structure after that point. + +Return Value: + + NTSTATUS + +--*/ +{ + WDF_OBJECT_ATTRIBUTES deviceAttributes; + PDEVICE_CONTEXT deviceContext; + WDFDEVICE device; + NTSTATUS status; + UNICODE_STRING szReference; + RtlInitUnicodeString(&szReference, L"CustomCameraSource"); // Needs to match the ReferenceString in INF + + WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&deviceAttributes, DEVICE_CONTEXT); + + status = WdfDeviceCreate(&DeviceInit, &deviceAttributes, &device); + + if (NT_SUCCESS(status)) { + // + // Get a pointer to the device context structure that we just associated + // with the device object. We define this structure in the device.h + // header file. DeviceGetContext is an inline function generated by + // using the WDF_DECLARE_CONTEXT_TYPE_WITH_NAME macro in device.h. + // This function will do the type checking and return the device context. + // If you pass a wrong object handle it will return NULL and assert if + // run under framework verifier mode. + // + deviceContext = DeviceGetContext(device); + + // + // Initialize the context. + // + deviceContext->PrivateDeviceData = 0; + + // + // Create a device interface so that applications can find and talk + // to us. + // + status = WdfDeviceCreateDeviceInterface( + device, + &CAMERA_CATEGORY, + &szReference // ReferenceString + ); + + if (NT_SUCCESS(status)) { + status = WdfDeviceCreateDeviceInterface( + device, + &CAPTURE_CATEGORY, + &szReference // ReferenceString + ); + } + + if (NT_SUCCESS(status)) { + status = WdfDeviceCreateDeviceInterface( + device, + &VIDEO_CATEGORY, + &szReference // ReferenceString + ); + } + + if (NT_SUCCESS(status)) { + // + // Initialize the I/O Package and any Queues + // + status = SimpleMediaSourceDriverQueueInitialize(device); + } + } + + return status; +} |
