147 lines
4.3 KiB
C
147 lines
4.3 KiB
C
|
//==========================================================================;
|
||
|
//
|
||
|
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
|
||
|
// KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
||
|
// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
|
||
|
// PURPOSE.
|
||
|
//
|
||
|
// Copyright (c) 1997 Microsoft Corporation. All Rights Reserved.
|
||
|
//
|
||
|
//
|
||
|
// History:
|
||
|
// 22-Aug-97 TKB Created Initial Interface Version
|
||
|
//
|
||
|
//==========================================================================;
|
||
|
|
||
|
#ifndef __IKS_H
|
||
|
#define __IKS_H
|
||
|
|
||
|
#include <ks.h>
|
||
|
#include <ksmedia.h>
|
||
|
#include <windows.h>
|
||
|
#include <winioctl.h>
|
||
|
#include <tchar.h>
|
||
|
|
||
|
#if !defined(FILE_DEVICE_KS)
|
||
|
// This comes from <wdm.h> but is not easily included(Been there, done that)
|
||
|
#define FILE_DEVICE_KS 0x000002F
|
||
|
#endif
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Force the correct library to be included.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
|
||
|
#ifdef _DEBUG
|
||
|
#pragma comment(lib, "icodecd.lib")
|
||
|
#else
|
||
|
#pragma comment(lib, "icodec.lib")
|
||
|
#endif
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Global Types
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
|
||
|
typedef GUID * LPGUID;
|
||
|
typedef const GUID *LPCGUID;
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// IKSDriver:: Kernel Mode Streaming Driver Interface
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
|
||
|
class IKSDriver
|
||
|
{
|
||
|
// Usable public interfaces
|
||
|
public:
|
||
|
IKSDriver(LPCGUID lpCategory, LPCSTR lpszFriendlyName);
|
||
|
~IKSDriver();
|
||
|
|
||
|
BOOL Ioctl(ULONG dwControlCode, LPBYTE pInput, ULONG nInput,
|
||
|
LPBYTE pOutput, ULONG nOutput,
|
||
|
DWORD *nReturned, LPOVERLAPPED lpOS=NULL );
|
||
|
|
||
|
BOOL IsValid() { return m_lpszDriver && m_hKSDriver; }
|
||
|
|
||
|
HANDLE m_hKSDriver;
|
||
|
|
||
|
// Helper functions and internal data
|
||
|
protected:
|
||
|
LPWSTR GetSymbolicName(LPCGUID lpCategory, LPCSTR lpszFriendlyName);
|
||
|
BOOL OpenDriver(DWORD dwAccess, DWORD dwFlags);
|
||
|
BOOL CloseDriver();
|
||
|
|
||
|
LPWSTR m_lpszDriver;
|
||
|
};
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// IKSPin:: Kernel Mode Streaming Pin Interface
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
|
||
|
class IKSPin
|
||
|
{
|
||
|
// Usable public interfaces
|
||
|
public:
|
||
|
IKSPin(IKSDriver &driver, int nPin, PKSDATARANGE pKSDataRange );
|
||
|
~IKSPin();
|
||
|
|
||
|
BOOL Ioctl(ULONG dwControlCode, void *pInput, ULONG nInput,
|
||
|
void *pOutput, ULONG nOutput,
|
||
|
ULONG *nReturned, LPOVERLAPPED lpOS=NULL );
|
||
|
|
||
|
BOOL Run(); // Automatically called by the constructors
|
||
|
BOOL Stop(); // Automatically called by the destructors
|
||
|
BOOL IsRunning() { return m_bRunning; }
|
||
|
|
||
|
int ReadData( LPBYTE lpBuffer, int nBytes, DWORD *lpcbReturned, LPOVERLAPPED lpOS );
|
||
|
int GetOverlappedResult( LPOVERLAPPED lpOS, LPDWORD lpdwTransferred = NULL, BOOL bWait=TRUE );
|
||
|
|
||
|
BOOL IsValid() { return m_IKSDriver && m_nPin>=0 && m_hKSPin /*&& m_bRunning*/; }
|
||
|
|
||
|
HANDLE m_hKSPin;
|
||
|
|
||
|
// Helper functions and internal data
|
||
|
protected:
|
||
|
BOOL OpenPin(PKSDATARANGE pKSDataRange);
|
||
|
BOOL ClosePin();
|
||
|
BOOL GetRunState( PKSSTATE pKSState );
|
||
|
BOOL SetRunState( KSSTATE KSState );
|
||
|
|
||
|
|
||
|
IKSDriver *m_IKSDriver;
|
||
|
LONG m_nPin;
|
||
|
BOOL m_bRunning;
|
||
|
};
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// IKSProperty:: Kernel Mode Streaming Property Interface
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
|
||
|
class IKSProperty
|
||
|
{
|
||
|
// Usable public interfaces
|
||
|
public:
|
||
|
IKSProperty(IKSDriver &pin, LPCGUID Set, ULONG Id, ULONG Size);
|
||
|
IKSProperty(IKSPin &pin, LPCGUID Set, ULONG Id, ULONG Size);
|
||
|
~IKSProperty();
|
||
|
|
||
|
BOOL SetValue(void *nValue);
|
||
|
BOOL GetValue(void *nValue);
|
||
|
|
||
|
BOOL IsValid() { return (m_IKSPin || m_IKSDriver) && m_Id && m_hKSProperty; }
|
||
|
|
||
|
HANDLE m_hKSProperty;
|
||
|
|
||
|
// Helper functions and internal data
|
||
|
protected:
|
||
|
BOOL OpenProperty();
|
||
|
BOOL CloseProperty();
|
||
|
|
||
|
IKSDriver *m_IKSDriver;
|
||
|
IKSPin *m_IKSPin;
|
||
|
GUID m_Set;
|
||
|
ULONG m_Id;
|
||
|
ULONG m_Size;
|
||
|
};
|
||
|
|
||
|
#endif
|
||
|
|