29#if defined(_BATTERYCLASS_)
32 #define USBCAMAPI DECLSPEC_IMPORT
40#define USBCAMD_DATA_PIPE 0x0001
41#define USBCAMD_MULTIPLEX_PIPE 0x0002
42#define USBCAMD_SYNC_PIPE 0x0004
43#define USBCAMD_DONT_CARE_PIPE 0x0008
45#define USBCAMD_VIDEO_STREAM 0x1
46#define USBCAMD_STILL_STREAM 0x2
47#define USBCAMD_VIDEO_STILL_STREAM (USBCAMD_VIDEO_STREAM | USBCAMD_STILL_STREAM)
49#define USBCAMD_PROCESSPACKETEX_DropFrame 0x0002
50#define USBCAMD_PROCESSPACKETEX_NextFrameIsStill 0x0004
51#define USBCAMD_PROCESSPACKETEX_CurrentFrameIsStill 0x0008
53#define USBCAMD_STOP_STREAM 0x00000001
54#define USBCAMD_START_STREAM 0x00000000
219#if defined(DEBUG_LOG)
224USBCAMD_Debug_LogEntry(
230#define ILOGENTRY(sig, info1, info2, info3) \
231 USBCAMD_Debug_LogEntry(sig, (ULONG)info1, (ULONG)info2, (ULONG)info3)
235#define ILOGENTRY(sig, info1, info2, info3)
272 0x2bcb75c0, 0xb27f, 0x11d1, 0xba, 0x41, 0x0, 0xa0, 0xc9, 0xd, 0x2b, 0x5);
308#define USBCAMD_VERSION_200 0x200
_In_ PSCSI_REQUEST_BLOCK Srb
_In_ ULONG _In_opt_ WDFREQUEST _In_opt_ PVOID _In_ size_t _In_ PVOID _In_ size_t _Out_ size_t * DataLength
static BYTE * GetData(BYTE *pData, ULONG *pLength)
_In_ PPNDIS_PACKET _In_ UINT NumberOfPackets
_In_ PNDIS_STRING _In_opt_ NDIS_HANDLE DeviceContext
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8)
const KSDEVICE_DESCRIPTOR DeviceDescriptor
PULONG MinorVersion OPTIONAL
PCAM_NEW_FRAME_ROUTINE_EX CamNewVideoFrameEx
PCAM_INITIALIZE_ROUTINE CamInitialize
PCAM_PROCESS_RAW_FRAME_ROUTINE_EX CamProcessRawVideoFrameEx
PCAM_CONFIGURE_ROUTINE_EX CamConfigureEx
PCAM_STATE_ROUTINE CamRestoreState
PCAM_PROCESS_PACKET_ROUTINE_EX CamProcessUSBPacketEx
PCAM_STOP_CAPTURE_ROUTINE_EX CamStopCaptureEx
PCAM_START_CAPTURE_ROUTINE_EX CamStartCaptureEx
PCAM_STATE_ROUTINE CamSaveState
PCAM_ALLOCATE_BW_ROUTINE_EX CamAllocateBandwidthEx
PCAM_INITIALIZE_ROUTINE CamUnInitialize
PCAM_FREE_BW_ROUTINE_EX CamFreeBandwidthEx
PCAM_STATE_ROUTINE CamSaveState
PCAM_START_CAPTURE_ROUTINE CamStartCapture
PCAM_STATE_ROUTINE CamRestoreState
PCAM_INITIALIZE_ROUTINE CamInitialize
PCAM_NEW_FRAME_ROUTINE CamNewVideoFrame
PCAM_PROCESS_PACKET_ROUTINE CamProcessUSBPacket
PCAM_STOP_CAPTURE_ROUTINE CamStopCapture
PCAM_PROCESS_RAW_FRAME_ROUTINE CamProcessRawVideoFrame
PCAM_FREE_BW_ROUTINE CamFreeBandwidth
PCAM_INITIALIZE_ROUTINE CamUnInitialize
PCAM_CONFIGURE_ROUTINE CamConfigure
PCAM_ALLOCATE_BW_ROUTINE CamAllocateBandwidth
PFNUSBCAMD_CancelBulkReadWrite USBCAMD_CancelBulkReadWrite
PFNUSBCAMD_WaitOnDeviceEvent USBCAMD_WaitOnDeviceEvent
PFNUSBCAMD_BulkReadWrite USBCAMD_BulkReadWrite
PFNUSBCAMD_SetIsoPipeState USBCAMD_SetIsoPipeState
PFNUSBCAMD_SetVideoFormat USBCAMD_SetVideoFormat
_In_ PNET_PNP_EVENT _In_ PTDI_PNP_CONTEXT Context1
_In_ PNET_PNP_EVENT _In_ PTDI_PNP_CONTEXT _In_ PTDI_PNP_CONTEXT Context2
@ USBCAMD_CamControlFlag_AssociatedFormat
@ USBCAMD_CamControlFlag_NoVideoRawProcessing
@ USBCAMD_CamControlFlag_NoStillRawProcessing
@ USBCAMD_CamControlFlag_EnableDeviceEvents
VOID(NTAPI * PSTREAM_RECEIVE_PACKET)(IN PVOID Srb, IN PVOID DeviceContext, IN PBOOLEAN Completed)
struct _USBCAMD_DEVICE_DATA2 USBCAMD_DEVICE_DATA2
USBCAMAPI PVOID NTAPI USBCAMD_AdapterReceivePacket(IN PHW_STREAM_REQUEST_BLOCK Srb, IN PUSBCAMD_DEVICE_DATA DeviceData, IN PDEVICE_OBJECT *DeviceObject, IN BOOLEAN NeedsCompletion)
NTSTATUS(NTAPI * PCAM_PROCESS_RAW_FRAME_ROUTINE_EX)(IN PDEVICE_OBJECT BusDeviceObject, IN PVOID DeviceContext, IN PVOID FrameContext, IN PVOID FrameBuffer, IN ULONG FrameLength, OUT PVOID RawFrameBuffer, IN ULONG RawFrameLength, IN ULONG NumberOfPackets, OUT PULONG BytesReturned, IN ULONG ActualRawFrameLength, IN ULONG StreamNumber)
NTSTATUS(NTAPI * PFNUSBCAMD_BulkReadWrite)(IN PVOID DeviceContext, IN USHORT PipeIndex, IN PVOID Buffer, IN ULONG BufferLength, IN PCOMMAND_COMPLETE_FUNCTION CommandComplete, IN PVOID CommandContext)
NTSTATUS(NTAPI * PCAM_FREE_BW_ROUTINE)(IN PDEVICE_OBJECT BusDeviceObject, IN PVOID DeviceContext)
ULONG(NTAPI * PCAM_PROCESS_PACKET_ROUTINE)(IN PDEVICE_OBJECT BusDeviceObject, IN PVOID DeviceContext, IN PVOID CurrentFrameContext, IN PUSBD_ISO_PACKET_DESCRIPTOR SyncPacket OPTIONAL, IN PVOID SyncBuffer OPTIONAL, IN PUSBD_ISO_PACKET_DESCRIPTOR DataPacket OPTIONAL, IN OUT PVOID DataBuffer, OUT PBOOLEAN FrameComplete, OUT PBOOLEAN NextFrameIsStill)
struct _USBCAMD_DEVICE_DATA USBCAMD_DEVICE_DATA
struct _pipe_config_descriptor * PUSBCAMD_Pipe_Config_Descriptor
USBCAMAPI ULONG NTAPI USBCAMD_DriverEntry(IN PVOID Context1, IN PVOID Context2, IN ULONG DeviceContextSize, IN ULONG FrameContextSize, IN PADAPTER_RECEIVE_PACKET_ROUTINE ReceivePacket)
VOID(NTAPI * PCAM_NEW_FRAME_ROUTINE_EX)(IN PVOID DeviceContext, IN PVOID FrameContext, IN ULONG StreamNumber, OUT PULONG FrameLength)
NTSTATUS(NTAPI * PCAM_START_CAPTURE_ROUTINE_EX)(IN PDEVICE_OBJECT BusDeviceObject, IN PVOID DeviceContext, IN ULONG StreamNumber)
USBCAMAPI ULONG NTAPI USBCAMD_InitializeNewInterface(IN PVOID DeviceContext, IN PVOID DeviceData, IN ULONG Version, IN ULONG CamControlFlag)
struct _USBCAMD_INTERFACE USBCAMD_INTERFACE
NTSTATUS(NTAPI * PCAM_STOP_CAPTURE_ROUTINE_EX)(IN PDEVICE_OBJECT BusDeviceObject, IN PVOID DeviceContext, IN ULONG StreamNumber)
struct _USBCAMD_INTERFACE * PUSBCAMD_INTERFACE
VOID(NTAPI * PADAPTER_RECEIVE_PACKET_ROUTINE)(IN OUT PHW_STREAM_REQUEST_BLOCK Srb)
NTSTATUS(NTAPI * PCAM_INITIALIZE_ROUTINE)(PDEVICE_OBJECT BusDeviceObject, PVOID DeviceContext)
NTSTATUS(NTAPI * PCAM_FREE_BW_ROUTINE_EX)(IN PDEVICE_OBJECT BusDeviceObject, IN PVOID DeviceContext, IN ULONG StreamNumber)
USBCAMAPI NTSTATUS NTAPI USBCAMD_ControlVendorCommand(IN PVOID DeviceContext, IN UCHAR Request, IN USHORT Value, IN USHORT Index, IN OUT PVOID Buffer, IN OUT PULONG BufferLength, IN BOOLEAN GetData, IN PCOMMAND_COMPLETE_FUNCTION CommandComplete OPTIONAL, IN PVOID CommandContext OPTIONAL)
USBCAMAPI NTSTATUS NTAPI USBCAMD_SelectAlternateInterface(IN PVOID DeviceContext, IN OUT PUSBD_INTERFACE_INFORMATION RequestInterface)
NTSTATUS(NTAPI * PCAM_ALLOCATE_BW_ROUTINE_EX)(IN PDEVICE_OBJECT BusDeviceObject, IN PVOID DeviceContext, IN PULONG RawFrameLength, IN PVOID Format, IN ULONG StreamNumber)
struct _pipe_config_descriptor USBCAMD_Pipe_Config_Descriptor
NTSTATUS(NTAPI * PFNUSBCAMD_SetIsoPipeState)(IN PVOID DeviceContext, IN ULONG PipeStateFlags)
NTSTATUS(NTAPI * PFNUSBCAMD_WaitOnDeviceEvent)(IN PVOID DeviceContext, IN ULONG PipeIndex, IN PVOID Buffer, IN ULONG BufferLength, IN PCOMMAND_COMPLETE_FUNCTION EventComplete, IN PVOID EventContext, IN BOOLEAN LoopBack)
NTSTATUS(NTAPI * PCAM_START_CAPTURE_ROUTINE)(IN PDEVICE_OBJECT BusDeviceObject, IN PVOID DeviceContext)
NTSTATUS(NTAPI * PCOMMAND_COMPLETE_FUNCTION)(IN PVOID DeviceContext, IN OUT PVOID CommandContext, IN NTSTATUS NtStatus)
struct _USBCAMD_DEVICE_DATA2 * PUSBCAMD_DEVICE_DATA2
NTSTATUS(NTAPI * PCAM_STATE_ROUTINE)(IN PDEVICE_OBJECT BusDeviceObject, IN PVOID DeviceContext)
NTSTATUS(NTAPI * PCAM_CONFIGURE_ROUTINE)(IN PDEVICE_OBJECT BusDeviceObject, IN PVOID DeviceContext, IN PUSBD_INTERFACE_INFORMATION Interface, IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor, IN PLONG DataPipeIndex, IN PLONG SyncPipeIndex)
NTSTATUS(NTAPI * PCAM_ALLOCATE_BW_ROUTINE)(IN PDEVICE_OBJECT BusDeviceObject, IN PVOID DeviceContext, IN PULONG RawFrameLength, IN PVOID Format)
USBCAMAPI NTSTATUS NTAPI USBCAMD_GetRegistryKeyValue(IN HANDLE Handle, IN PWCHAR KeyNameString, IN ULONG KeyNameStringLength, IN PVOID Data, IN ULONG DataLength)
NTSTATUS(NTAPI * PFNUSBCAMD_SetVideoFormat)(IN PVOID DeviceContext, IN PHW_STREAM_REQUEST_BLOCK pSrb)
NTSTATUS(NTAPI * PCAM_CONFIGURE_ROUTINE_EX)(IN PDEVICE_OBJECT BusDeviceObject, IN PVOID DeviceContext, IN PUSBD_INTERFACE_INFORMATION Interface, IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor, IN ULONG PipeConfigListSize, IN PUSBCAMD_Pipe_Config_Descriptor PipeConfig, IN PUSB_DEVICE_DESCRIPTOR DeviceDescriptor)
VOID(NTAPI * PCAM_NEW_FRAME_ROUTINE)(IN PVOID DeviceContext, IN PVOID FrameContext)
NTSTATUS(NTAPI * PCAM_PROCESS_RAW_FRAME_ROUTINE)(IN PDEVICE_OBJECT BusDeviceObject, IN PVOID DeviceContext, IN PVOID FrameContext, IN PVOID FrameBuffer, IN ULONG FrameLength, OUT PVOID RawFrameBuffer, IN ULONG RawFrameLength, IN ULONG NumberOfPackets, OUT PULONG BytesReturned)
NTSTATUS(NTAPI * PFNUSBCAMD_CancelBulkReadWrite)(IN PVOID DeviceContext, IN ULONG PipeIndex)
ULONG(NTAPI * PCAM_PROCESS_PACKET_ROUTINE_EX)(IN PDEVICE_OBJECT BusDeviceObject, IN PVOID DeviceContext, IN PVOID CurrentFrameContext, IN PUSBD_ISO_PACKET_DESCRIPTOR SyncPacket OPTIONAL, IN PVOID SyncBuffer OPTIONAL, IN PUSBD_ISO_PACKET_DESCRIPTOR DataPacket OPTIONAL, IN OUT PVOID DataBuffer, OUT PBOOLEAN FrameComplete, OUT PULONG PacketFlag, OUT PULONG ValidDataOffset)
NTSTATUS(NTAPI * PCAM_STOP_CAPTURE_ROUTINE)(IN PDEVICE_OBJECT BusDeviceObject, IN PVOID DeviceContext)
struct _USBCAMD_DEVICE_DATA * PUSBCAMD_DEVICE_DATA
_In_ WDFCOLLECTION _In_ ULONG Index
_In_ PDEVICE_OBJECT DeviceObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID _Out_ PINTERFACE Interface
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID _Out_ PINTERFACE _In_ USHORT _In_ USHORT Version
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_ ULONG _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesReturned
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
_In_ WDFUSBINTERFACE _In_ UCHAR PipeIndex