#ifndef __HIDTEST_H__ #define __HIDTEST_H__ /***************************************************************************** /* Exportable typedefs /*****************************************************************************/ typedef PTSTR DEVICE_STRING; typedef struct _HidTestStatus { ULONG nOperationsPerformed; ULONG nOperationsPassed; ULONG nOperationsFailed; } HIDTEST_STATUS, *PHIDTEST_STATUS; typedef struct _HidDeviceInfo { HANDLE HidDeviceHandle; DEVICE_STRING HidDeviceString; PHIDP_PREPARSED_DATA HidDevicePpd; PHIDD_ATTRIBUTES HidDeviceAttributes; PHIDP_CAPS HidDeviceCaps; BOOL IsPhysicalDevice; } HIDTEST_DEVICEINFO, *PHIDTEST_DEVICEINFO; typedef VOID HIDTEST_API(PHIDTEST_DEVICEINFO, ULONG, PHIDTEST_STATUS); typedef HIDTEST_API *PHIDTEST_API; typedef BOOL (*PCREATE_PHYSICAL_DEVICE_INFO_PROC)(DEVICE_STRING, BOOL, PHIDTEST_DEVICEINFO ); typedef BOOL (*PCREATE_LOGICAL_DEVICE_INFO_PROC)(PCHAR, ULONG, PHIDTEST_DEVICEINFO ); typedef VOID (*PCREATE_FREE_DEVICE_INFO_PROC)(PHIDTEST_DEVICEINFO); typedef BOOL (*PCREATE_TEST_LOG_PROC)(PCHAR); typedef VOID (*PSET_LOG_ON_PROC)(BOOL); typedef VOID (*PCLOSE_TEST_LOG_PROC)(VOID); typedef struct _functions { PHIDTEST_API HIDTest_VerifyHidGuid; PHIDTEST_API HIDTest_VerifyStrings; PHIDTEST_API HIDTest_VerifyPreparsedData; PHIDTEST_API HIDTest_VerifyAttributes; PHIDTEST_API HIDTest_VerifyCapabilities; PCREATE_PHYSICAL_DEVICE_INFO_PROC HIDTest_CreatePhysicalDeviceInfo; PCREATE_LOGICAL_DEVICE_INFO_PROC HIDTest_CreateLogicalDeviceInfo; PCREATE_FREE_DEVICE_INFO_PROC HIDTest_FreeDeviceInfo; PCREATE_TEST_LOG_PROC HIDTest_CreateTestLog; PSET_LOG_ON_PROC HIDTest_SetLogOn; PCLOSE_TEST_LOG_PROC HIDTest_CloseTestLog; } HIDTEST_FUNCTIONS, *PHIDTEST_FUNCTIONS; typedef VOID (*PINIT_PROC)(PHIDTEST_FUNCTIONS); #define HIDTest_AllocateDeviceString(nChars) ALLOC(((nChars)+1) * sizeof(TCHAR)) #define HIDTest_FreeDeviceString(String) FREE(String) /* // Declare the exportable function as normal function declarations when // this file is include in HIDTEST.C. Otherwise, we want to declare // our pointers to these functions as external variables */ #ifdef __HIDTEST_C__ VOID HIDTest_InitExportAddress( PHIDTEST_FUNCTIONS Exports ); HIDTEST_API HIDTest_VerifyHidGuidA; HIDTEST_API HIDTest_VerifyStringsA; HIDTEST_API HIDTest_VerifyPreparsedDataA; HIDTEST_API HIDTest_VerifyAttributesA; HIDTEST_API HIDTest_VerifyCapabilitiesA; VOID HIDTest_VerifyPhysicalDesc( IN HANDLE HidDevice, IN PCHAR PhysDesc, IN ULONG PhysDescLength, IN ULONG nIterations, OUT PHIDTEST_STATUS Status ); VOID HIDTest_VerifyFeatures( IN HANDLE HidDevice, IN PHIDP_BUTTON_CAPS FeatureButtonCaps, IN PHIDP_VALUE_CAPS FeatureValueCaps, IN ULONG nIterations, OUT PHIDTEST_STATUS Status ); VOID HIDTest_VerifyConfiguratons( IN HANDLE HidDevice, IN ULONG nConfigurations, IN BOOL RestoreCurrentConfig, IN ULONG nIterations, OUT PHIDTEST_STATUS Status ); VOID HIDTest_VerifyInputButtons( IN HANDLE HidDevice, IN ULONG nBuffers, IN BOOL RestoreCurrentCount, IN ULONG nIterations, OUT PHIDTEST_STATUS Status ); VOID HIDTest_VerifyDevices( IN ULONG nStrings, IN DEVICE_STRING DeviceStrings[], IN ULONG nIterations, OUT PHIDTEST_STATUS Status ); VOID HIDTest_VerifyLinkCollections( IN PHIDP_PREPARSED_DATA Ppd, IN PHIDP_LINK_COLLECTION_NODE CollectionList, IN ULONG nCollections, IN ULONG nIterations, OUT PHIDTEST_STATUS Status ); BOOL HIDTest_CreatePhysicalDeviceInfoA( IN DEVICE_STRING DeviceName, IN BOOL OpenOverlapped, OUT PHIDTEST_DEVICEINFO DeviceInfo ); BOOL HIDTest_CreateLogicalDeviceInfoA( IN PCHAR DevicePpd, IN ULONG DevicePpdLength, OUT PHIDTEST_DEVICEINFO DeviceInfo ); VOID HIDTest_FreeDeviceInfoA( IN PHIDTEST_DEVICEINFO DeviceInfo ); BOOL HIDTest_CreateTestLogA( IN PCHAR LogFileName ); VOID HIDTest_SetLogOnA( BOOL TurnOn ); VOID HIDTest_CloseTestLogA( VOID ); #else /* // Declare this structure. This structure will be mapped into an user // space which might possibly use HIDTEST.DLL. Any program that // uses HIDTest needs to use the HIDTEST_INIT() macro before calling // any of the functions. This macro will take care of resolving all // the function addresses. */ HIDTEST_FUNCTIONS HIDTest_Exports; /* // This is the definition of the HIDTEST_INIT() macro which initializes // all the function address that are exported by the DLL. */ #define HIDTEST_INIT() \ { \ PINIT_PROC INIT_PROC; \ \ INIT_PROC = (PINIT_PROC) GetProcAddress(GetModuleHandle("HIDTEST.DLL"), \ "HIDTest_InitExportAddress" \ ); \ \ INIT_PROC(&HIDTest_Exports); \ } /* // These are the defines that are used by the HIDTest to access the // exported testing functions. */ #define HIDTest_VerifyHidGuid HIDTest_Exports.HIDTest_VerifyHidGuid #define HIDTest_VerifyStrings HIDTest_Exports.HIDTest_VerifyStrings #define HIDTest_VerifyPreparsedData HIDTest_Exports.HIDTest_VerifyPreparsedData #define HIDTest_VerifyAttributes HIDTest_Exports.HIDTest_VerifyAttributes #define HIDTest_VerifyCapabilities HIDTest_Exports.HIDTest_VerifyCapabilities #define HIDTest_CreatePhysicalDeviceInfo HIDTest_Exports.HIDTest_CreatePhysicalDeviceInfo #define HIDTest_CreateLogicalDeviceInfo HIDTest_Exports.HIDTest_CreateLogicalDeviceInfo #define HIDTest_FreeDeviceInfo HIDTest_Exports.HIDTest_FreeDeviceInfo #define HIDTest_CreateTestLog HIDTest_Exports.HIDTest_CreateTestLog #define HIDTest_SetLogOn HIDTest_Exports.HIDTest_SetLogOn #define HIDTest_CloseTestLog HIDTest_Exports.HIDTest_CloseTestLog #endif #endif