//==========================================================================; // // 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 #include #include #include #include #if !defined(FILE_DEVICE_KS) // This comes from 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