|
|
/*****************************************************************************
* * DIExtDll.c * * Copyright (c) 1997 Microsoft Corporation. All Rights Reserved. * * Abstract: * * Dynamic loading of optional external DLLs. * * Contents: * * ExtDll_Init * ExtDll_Term * *****************************************************************************/
#include "dinputpr.h"
/*****************************************************************************
* * The sqiffle for this file. * *****************************************************************************/
#define sqfl sqflExtDll
/*****************************************************************************
* * @define T | TEXT(ch) | * * Either "A" or "W", depending on whether we are building * the ANSI or UNICODE version. * *****************************************************************************/
#ifdef UNICODE
#define T "W"
#else
#define T "A"
#endif
/*****************************************************************************
* * @define MAKEAPINAME | nm | * * Emit a c_sz that records the name of the API. * *****************************************************************************/
#define MAKEAPINAME(nm) CHAR c_sz##nm[] = #nm
#ifndef STATIC_DLLUSAGE
/*****************************************************************************
* * CFGMGR32 * * Note that this must match the CFGMGR32 structure in diextdll.h * *****************************************************************************/
#pragma BEGIN_CONST_DATA
MAKEAPINAME(CM_Get_Child); MAKEAPINAME(CM_Get_Sibling); MAKEAPINAME(CM_Get_Parent); MAKEAPINAME(CM_Get_DevNode_Registry_Property) T; MAKEAPINAME(CM_Set_DevNode_Registry_Property) T; MAKEAPINAME(CM_Get_Device_ID) T; #pragma END_CONST_DATA
#ifndef WINNT
LPSTR g_cfgmgr32_fn[] = { c_szCM_Get_Child, c_szCM_Get_Sibling, c_szCM_Get_Parent, c_szCM_Get_DevNode_Registry_Property, c_szCM_Set_DevNode_Registry_Property, c_szCM_Get_Device_ID };
HINSTANCE g_hinstcfgmgr32;
CFGMGR32 g_cfgmgr32 = { (FARPROC)DIDummy_CM_Get_Child, (FARPROC)DIDummy_CM_Get_Sibling, (FARPROC)DIDummy_CM_Get_Parent, (FARPROC)DIDummy_CM_Get_DevNode_Registry_Property, (FARPROC)DIDummy_CM_Set_DevNode_Registry_Property, (FARPROC)DIDummy_CM_Get_Device_ID }; #endif
/*****************************************************************************
* * SETUPAPI * * Note that this must match the SETUPAPI structure in diextdll.h * *****************************************************************************/
#pragma BEGIN_CONST_DATA
MAKEAPINAME(SetupDiGetClassDevs) T; MAKEAPINAME(SetupDiDestroyDeviceInfoList); MAKEAPINAME(SetupDiGetDeviceInterfaceDetail) T; MAKEAPINAME(SetupDiEnumDeviceInterfaces); MAKEAPINAME(SetupDiCreateDeviceInterfaceRegKey) T; MAKEAPINAME(SetupDiCallClassInstaller); MAKEAPINAME(SetupDiGetDeviceRegistryProperty) T; MAKEAPINAME(SetupDiSetDeviceRegistryProperty) T; MAKEAPINAME(SetupDiGetDeviceInstanceId) T; MAKEAPINAME(SetupDiOpenDeviceInfo) T; MAKEAPINAME(SetupDiCreateDeviceInfoList); MAKEAPINAME(SetupDiOpenDevRegKey); #pragma END_CONST_DATA
LPSTR g_setupapi_fn[] = { c_szSetupDiGetClassDevs, c_szSetupDiDestroyDeviceInfoList, c_szSetupDiGetDeviceInterfaceDetail, c_szSetupDiEnumDeviceInterfaces, c_szSetupDiCreateDeviceInterfaceRegKey, c_szSetupDiCallClassInstaller, c_szSetupDiGetDeviceRegistryProperty, c_szSetupDiSetDeviceRegistryProperty, c_szSetupDiGetDeviceInstanceId, c_szSetupDiOpenDeviceInfo, c_szSetupDiCreateDeviceInfoList, c_szSetupDiOpenDevRegKey, #ifdef WINNT
c_szCM_Get_Child, c_szCM_Get_Sibling, c_szCM_Get_Parent, c_szCM_Get_DevNode_Registry_Property, c_szCM_Set_DevNode_Registry_Property, c_szCM_Get_Device_ID #endif
};
HINSTANCE g_hinstSetupapi;
SETUPAPI g_setupapi = { (FARPROC)DIDummy_SetupDiGetClassDevs, (FARPROC)DIDummy_SetupDiDestroyDeviceInfoList, (FARPROC)DIDummy_SetupDiGetDeviceInterfaceDetail, (FARPROC)DIDummy_SetupDiEnumDeviceInterfaces, (FARPROC)DIDummy_SetupDiCreateDeviceInterfaceRegKey, (FARPROC)DIDummy_SetupDiCallClassInstaller, (FARPROC)DIDummy_SetupDiGetDeviceRegistryProperty, (FARPROC)DIDummy_SetupDiSetDeviceRegistryProperty, (FARPROC)DIDummy_SetupDiGetDeviceInstanceId, (FARPROC)DIDummy_SetupDiOpenDeviceInfo, (FARPROC)DIDummy_SetupDiCreateDeviceInfoList, (FARPROC)DIDummy_SetupDiOpenDevRegKey, #ifdef WINNT
(FARPROC)DIDummy_CM_Get_Child, (FARPROC)DIDummy_CM_Get_Sibling, (FARPROC)DIDummy_CM_Get_Parent, (FARPROC)DIDummy_CM_Get_DevNode_Registry_Property, (FARPROC)DIDummy_CM_Set_DevNode_Registry_Property, (FARPROC)DIDummy_CM_Get_Device_ID #endif
};
/*****************************************************************************
* * HIDDLL * * Note that this must match the HIDDLL structure in diextdll.h * *****************************************************************************/
#pragma BEGIN_CONST_DATA
MAKEAPINAME(HidD_GetHidGuid); MAKEAPINAME(HidD_GetPreparsedData); MAKEAPINAME(HidD_FreePreparsedData); MAKEAPINAME(HidD_FlushQueue); MAKEAPINAME(HidD_GetAttributes); MAKEAPINAME(HidD_GetFeature); MAKEAPINAME(HidD_SetFeature); MAKEAPINAME(HidD_GetProductString); MAKEAPINAME(HidD_GetInputReport); MAKEAPINAME(HidP_GetCaps); MAKEAPINAME(HidP_GetButtonCaps); MAKEAPINAME(HidP_GetValueCaps); MAKEAPINAME(HidP_GetLinkCollectionNodes); MAKEAPINAME(HidP_MaxDataListLength); MAKEAPINAME(HidP_GetUsagesEx); MAKEAPINAME(HidP_GetScaledUsageValue); MAKEAPINAME(HidP_GetData); MAKEAPINAME(HidP_SetData); MAKEAPINAME(HidP_GetUsageValue); MAKEAPINAME(HidP_MaxUsageListLength); MAKEAPINAME(HidP_GetSpecificButtonCaps); MAKEAPINAME(HidP_TranslateUsagesToI8042ScanCodes); #pragma END_CONST_DATA
LPSTR g_hiddll_fn[] = { c_szHidD_GetHidGuid, c_szHidD_GetPreparsedData, c_szHidD_FreePreparsedData, c_szHidD_FlushQueue, c_szHidD_GetAttributes, c_szHidD_GetFeature, c_szHidD_SetFeature, c_szHidD_GetProductString, c_szHidD_GetInputReport, c_szHidP_GetCaps, c_szHidP_GetButtonCaps, c_szHidP_GetValueCaps, c_szHidP_GetLinkCollectionNodes, c_szHidP_MaxDataListLength, c_szHidP_GetUsagesEx, c_szHidP_GetScaledUsageValue, c_szHidP_GetData, c_szHidP_SetData, c_szHidP_GetUsageValue, c_szHidP_MaxUsageListLength, c_szHidP_GetSpecificButtonCaps, c_szHidP_TranslateUsagesToI8042ScanCodes };
HINSTANCE g_hinstHid;
HIDDLL g_hiddll = { (FARPROC)DIDummy_HidD_GetHidGuid, (FARPROC)DIDummy_HidD_GetPreparsedData, (FARPROC)DIDummy_HidD_FreePreparsedData, (FARPROC)DIDummy_HidD_FlushQueue, (FARPROC)DIDummy_HidD_GetAttributes, (FARPROC)DIDummy_HidD_GetFeature, (FARPROC)DIDummy_HidD_SetFeature, (FARPROC)DIDummy_HidD_GetProductString, (FARPROC)DIDummy_HidD_GetInputReport, (FARPROC)DIDummy_HidP_GetCaps, (FARPROC)DIDummy_HidP_GetButtonCaps, (FARPROC)DIDummy_HidP_GetValueCaps, (FARPROC)DIDummy_HidP_GetLinkCollectionNodes, (FARPROC)DIDummy_HidP_MaxDataListLength, (FARPROC)DIDummy_HidP_GetUsagesEx, (FARPROC)DIDummy_HidP_GetScaledUsageValue, (FARPROC)DIDummy_HidP_GetData, (FARPROC)DIDummy_HidP_SetData, (FARPROC)DIDummy_HidP_GetUsageValue, (FARPROC)DIDummy_HidP_MaxUsageListLength, (FARPROC)DIDummy_HidP_GetSpecificButtonCaps, (FARPROC)DIDummy_HidP_TranslateUsagesToI8042ScanCodes, };
/*****************************************************************************
* * Winmm * * Note that this must match the Winmm structure in diextdll.h * *****************************************************************************/
#pragma BEGIN_CONST_DATA
MAKEAPINAME(joyGetDevCaps) T; MAKEAPINAME(joyGetPosEx); MAKEAPINAME(joyGetPos); MAKEAPINAME(joyConfigChanged); MAKEAPINAME(mmioClose); MAKEAPINAME(mmioOpenA); MAKEAPINAME(mmioDescend); MAKEAPINAME(mmioCreateChunk); MAKEAPINAME(mmioRead); MAKEAPINAME(mmioWrite); MAKEAPINAME(mmioAscend); #pragma END_CONST_DATA
LPSTR g_winmmdll_fn[] = { c_szjoyGetDevCaps, c_szjoyGetPosEx, c_szjoyGetPos, c_szjoyConfigChanged, c_szmmioClose, c_szmmioOpenA, c_szmmioDescend, c_szmmioCreateChunk, c_szmmioRead, c_szmmioWrite, c_szmmioAscend }; HINSTANCE g_hinstwinmmdll; WINMMDLL g_winmmdll = { (FARPROC)DIDummy_joyGetDevCaps, (FARPROC)DIDummy_joyGetPosEx, (FARPROC)DIDummy_joyGetPos, (FARPROC)DIDummy_joyConfigChanged, (FARPROC)DIDummy_mmioClose, (FARPROC)DIDummy_mmioOpenA, (FARPROC)DIDummy_mmioDescend, (FARPROC)DIDummy_mmioCreateChunk, (FARPROC)DIDummy_mmioRead, (FARPROC)DIDummy_mmioWrite, (FARPROC)DIDummy_mmioAscend, };
/*****************************************************************************
* * User32 * * Note that this must match the User32 structure in dihid.h * *****************************************************************************/
#ifdef USE_WM_INPUT
#pragma BEGIN_CONST_DATA
MAKEAPINAME(RegisterRawInputDevices); MAKEAPINAME(GetRawInputData); #pragma END_CONST_DATA
LPSTR g_user32_fn[] = { c_szRegisterRawInputDevices, c_szGetRawInputData, };
HINSTANCE g_hinstuser32;
USER32 g_user32 = { (FARPROC)DIDummy_RegisterRawInputDevices, (FARPROC)DIDummy_GetRawInputData, };
#endif
/*****************************************************************************
* * @doc INTERNAL * * @func HINSTANCE | ExtDll_LoadDll | * * Loads a DLL and resolves all the imports. * * @parm LPCTSTR | ptszName | * * The name of the DLL to load. * * @parm PMANUALIMPORT | rgmi | * * Array of <t MANUALIMPORT> structures to resolve. * * @parm int | cmi | * * Number of <t MANUALIMPORT> structures to resolve. * * @parm LPSTR * | ppszProcName | * * Function names. * * @returns * * Returns the instance handle of the DLL if one or more of the imports * were resolved successfully; otherwise, unloads the DLL * and returns 0. * * If none of the imports was resolved successfully, the value * of the entries of <p rgmi> are not changed. * *****************************************************************************/
HINSTANCE INTERNAL ExtDll_LoadDll(LPCTSTR ptszName, PMANUALIMPORT rgmi, int cmi, LPSTR *ppszProcName) { HINSTANCE hinst = 0; BOOL fNeedFreeLib = TRUE;
EnterProcR(ExtDll_LoadDll, (_ "spuup", ptszName, rgmi, cmi, ppszProcName));
hinst = LoadLibrary(ptszName); if(hinst) { int imi; FARPROC fp;
for(imi = 0; imi < cmi; imi++) { fp = GetProcAddress(hinst, ppszProcName[imi]); if( fp ) { rgmi[imi].pfn = fp; fNeedFreeLib = FALSE; } } }
if( fNeedFreeLib ) { FreeLibrary(hinst); hinst = 0; } ExitProcX((UINT_PTR)hinst); return hinst; }
/*****************************************************************************
* * @doc INTERNAL * * @func void | ExtDll_Init | * * Try to load our optional DLLs. Don't get upset if they * don't load. * *****************************************************************************/
void EXTERNAL ExtDll_Init(void) { g_hinstHid = ExtDll_LoadDll(TEXT("HID.DLL"), g_hiddll.rgmi, cA(g_hiddll.rgmi), g_hiddll_fn ); g_hinstSetupapi = ExtDll_LoadDll(TEXT("SETUPAPI.DLL"), g_setupapi.rgmi, cA(g_setupapi.rgmi), g_setupapi_fn ); #ifndef WINNT
g_hinstcfgmgr32 = ExtDll_LoadDll( TEXT("CFGMGR32.DLL" ), g_cfgmgr32.rgmi, cA(g_cfgmgr32.rgmi), g_cfgmgr32_fn ); #endif
#ifdef WINNT
#define JOYPROCNUM 4
g_hinstwinmmdll = ExtDll_LoadDll( TEXT("WINMM.DLL" ), &g_winmmdll.rgmi[JOYPROCNUM], cA(g_winmmdll.rgmi) - JOYPROCNUM, &g_winmmdll_fn[JOYPROCNUM] ); #undef JOYPROCNUM
#else
g_hinstwinmmdll = ExtDll_LoadDll( TEXT("WINMM.DLL" ), g_winmmdll.rgmi, cA(g_winmmdll.rgmi), g_winmmdll_fn ); #endif
#ifdef USE_WM_INPUT
g_hinstuser32 = ExtDll_LoadDll( TEXT("USER32.DLL" ), g_user32.rgmi, cA(g_user32.rgmi), g_user32_fn ); #endif
}
#endif /* STATIC_DLLUSAGE */
/*****************************************************************************
* * @doc INTERNAL * * @func void | ExtDll_Term | * * Unload any optional DLLs that we loaded. * *****************************************************************************/
void EXTERNAL ExtDll_Term(void) { #ifndef STATIC_DLLUSAGE
if(g_hinstSetupapi) { #endif /* STATIC_DLLUSAGE */
DllEnterCrit(); if(g_phdl) { DIHid_EmptyHidList(); FreePpv(&g_phdl); }
DIBus_FreeMemory();
DllLeaveCrit();
#ifndef STATIC_DLLUSAGE
FreeLibrary(g_hinstSetupapi); g_hinstSetupapi = NULL; }
#ifndef WINNT
if(g_hinstcfgmgr32) { FreeLibrary(g_hinstcfgmgr32); g_hinstcfgmgr32 = NULL; } #endif
if(g_hinstHid) { FreeLibrary(g_hinstHid); g_hinstHid = NULL; }
if( g_hinstwinmmdll) { FreeLibrary(g_hinstwinmmdll); g_hinstwinmmdll = NULL; }
#ifdef USE_WM_INPUT
if( g_hinstuser32) { FreeLibrary(g_hinstuser32); g_hinstuser32 = NULL; } #endif
#endif /* STATIC_DLLUSAGE */
}
#ifndef STATIC_DLLUSAGE
////////////////////////////////////////
// cfgmgr32.dll dummy functions
////////////////////////////////////////
CONFIGRET WINAPI DIDummy_CM_Get_Child ( OUT PDEVINST pdnDevInst, IN DEVINST dnDevInst, IN ULONG ulFlags ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_CM_Get_Child( %08x, %08x, %u )"), pdnDevInst, dnDevInst, ulFlags );
return CR_FAILURE; }
CONFIGRET WINAPI DIDummy_CM_Get_Sibling ( OUT PDEVINST pdnDevInst, IN DEVINST DevInst, IN ULONG ulFlags ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_CM_Get_Sibling( %08x, %08x, %u )"), pdnDevInst, DevInst, ulFlags );
return CR_FAILURE; }
CONFIGRET WINAPI DIDummy_CM_Get_Parent ( OUT PDEVINST pdnDevInst, IN DEVINST dnDevInst, IN ULONG ulFlags ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_CM_Get_Parent( %08x, %08x, %u )"), pdnDevInst, dnDevInst, ulFlags );
return CR_FAILURE; }
CONFIGRET WINAPI DIDummy_CM_Get_DevNode_Registry_Property ( IN DEVINST dnDevInst, IN ULONG ulProperty, OUT PULONG pulRegDataType, OPTIONAL OUT PVOID Buffer, OPTIONAL IN OUT PULONG pulLength, IN ULONG ulFlags ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_CM_Get_DevNode_Registry_Property( %08x, %u, %08x, %08x, %08x, %u )"), dnDevInst, ulProperty, pulRegDataType, Buffer, pulLength, ulFlags );
return CR_FAILURE; }
CONFIGRET WINAPI DIDummy_CM_Set_DevNode_Registry_Property ( IN DEVINST dnDevInst, IN ULONG ulProperty, IN PVOID Buffer, OPTIONAL IN ULONG ulLength, IN ULONG ulFlags ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_CM_Set_DevNode_Registry_Property( %08x, %u, %08x, %u, %u )"), dnDevInst, ulProperty, Buffer, ulLength, ulFlags );
return CR_FAILURE; }
CONFIGRET WINAPI DIDummy_CM_Get_Device_ID ( IN DEVINST dnDevInst, OUT PTCHAR Buffer, IN ULONG BufferLen, IN ULONG ulFlags ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_CM_Get_Device_ID( %08x, %08x, %u, %u )"), dnDevInst, Buffer, BufferLen, ulFlags );
return CR_FAILURE; }
////////////////////////////////////////
//Setupapi.dll dummy functions
////////////////////////////////////////
HDEVINFO WINAPI DIDummy_SetupDiGetClassDevs ( IN LPGUID ClassGuid, OPTIONAL IN LPCTSTR Enumerator, OPTIONAL IN HWND hwndParent, OPTIONAL IN DWORD Flags ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_SetupDiGetClassDevs( %08x, %08x, %08x, %u )"), ClassGuid, Enumerator, hwndParent, Flags );
return INVALID_HANDLE_VALUE; }
BOOL WINAPI DIDummy_SetupDiDestroyDeviceInfoList ( IN HDEVINFO DeviceInfoSet ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_SetupDiDestroyDeviceInfoList( %08x )"), DeviceInfoSet );
return FALSE; }
BOOL WINAPI DIDummy_SetupDiGetDeviceInterfaceDetail ( IN HDEVINFO DeviceInfoSet, IN PSP_DEVICE_INTERFACE_DATA pdid, OUT PSP_DEVICE_INTERFACE_DETAIL_DATA pdidd, OPTIONAL IN DWORD cbDidd, OUT PDWORD RequiredSize, OPTIONAL OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_SetupDiGetDeviceInterfaceDetail( %08x, %08x, %08x, %u, %08x, %08x )"), DeviceInfoSet, pdid, pdidd, cbDidd, RequiredSize, DeviceInfoData );
return FALSE; }
BOOL WINAPI DIDummy_SetupDiEnumDeviceInterfaces ( IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL IN LPGUID InterfaceClassGuid, IN DWORD MemberIndex, OUT PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_SetupDiEnumDeviceInterfaces( %08x, %08x, %08x, %u, %08x )"), DeviceInfoSet, DeviceInfoData, InterfaceClassGuid, MemberIndex, DeviceInterfaceData );
return FALSE; }
HKEY WINAPI DIDummy_SetupDiCreateDeviceInterfaceRegKey ( IN HDEVINFO hdev, IN PSP_DEVICE_INTERFACE_DATA pdid, IN DWORD Reserved, IN REGSAM samDesired, IN HINF InfHandle, OPTIONAL IN PCSTR InfSectionName OPTIONAL ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_SetupDiCreateDeviceInterfaceRegKey( %08x, %08x, %u, %u, %08x, %s )"), hdev, pdid, Reserved, samDesired, InfHandle, InfSectionName );
return INVALID_HANDLE_VALUE; }
BOOL WINAPI DIDummy_SetupDiCallClassInstaller ( IN DI_FUNCTION InstallFunction, IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_SetupDiCallClassInstaller( %08x, %08x, %08x )"), InstallFunction, DeviceInfoSet, DeviceInfoData );
return FALSE; }
BOOL WINAPI DIDummy_SetupDiGetDeviceRegistryProperty ( IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData, IN DWORD Property, OUT PDWORD PropertyRegDataType, OPTIONAL OUT PBYTE PropertyBuffer, IN DWORD PropertyBufferSize, OUT PDWORD RequiredSize OPTIONAL ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_SetupDiGetDeviceRegistryProperty( %08x, %08x, %u, %08x, %08x, %u, %08x )"), DeviceInfoSet, DeviceInfoData, Property, PropertyRegDataType, PropertyBuffer, PropertyBufferSize, RequiredSize );
return FALSE; }
BOOL WINAPI DIDummy_SetupDiSetDeviceRegistryProperty ( IN HDEVINFO DeviceInfoSet, IN OUT PSP_DEVINFO_DATA DeviceInfoData, IN DWORD Property, IN CONST BYTE* PropertyBuffer, IN DWORD PropertyBufferSize ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_SetupDiGetDeviceInstanceId( %08x, %08x, %u, %08x, %u )"), DeviceInfoSet, DeviceInfoData, Property, PropertyBuffer, PropertyBufferSize );
return FALSE; }
BOOL WINAPI DIDummy_SetupDiGetDeviceInstanceId ( IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData, OUT PTSTR DeviceInstanceId, IN DWORD DeviceInstanceIdSize, OUT PDWORD RequiredSize OPTIONAL ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_SetupDiGetDeviceInstanceId( %08x, %08x, %08x, %u, %08x )"), DeviceInfoSet, DeviceInfoData, DeviceInstanceId, DeviceInstanceIdSize, RequiredSize );
return FALSE; }
BOOL WINAPI DIDummy_SetupDiOpenDeviceInfo ( IN HDEVINFO DeviceInfoSet, IN LPCTSTR DeviceInstanceId, IN HWND hwndParent, OPTIONAL IN DWORD OpenFlags, OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_SetupDiOpenDeviceInfo( %08x, %08x, %08x, %u, %08x )"), DeviceInfoSet, DeviceInstanceId, hwndParent, OpenFlags, DeviceInfoData );
return FALSE; }
HDEVINFO WINAPI DIDummy_SetupDiCreateDeviceInfoList ( IN LPGUID ClassGuid, OPTIONAL IN HWND hwndParent OPTIONAL ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_SetupDiCreateDeviceInfoList( %08x, %08x )"), ClassGuid, hwndParent );
return INVALID_HANDLE_VALUE; }
HKEY WINAPI DIDummy_SetupDiOpenDevRegKey ( IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData, IN DWORD Scope, IN DWORD HwProfile, IN DWORD KeyType, IN REGSAM samDesired ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_SetupDiOpenDevRegKey( %08x, %08x, %u, %u, %u, %u )"), DeviceInfoSet, DeviceInfoData, Scope, HwProfile, KeyType, samDesired );
return INVALID_HANDLE_VALUE; }
////////////////////////////////////////
// hid.dll dummy functions
////////////////////////////////////////
void __stdcall DIDummy_HidD_GetHidGuid ( OUT LPGUID HidGuid ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_HidD_GetHidGuid( %08x )"), HidGuid );
return; }
BOOLEAN __stdcall DIDummy_HidD_GetPreparsedData ( IN HANDLE HidDeviceObject, OUT PHIDP_PREPARSED_DATA * PreparsedData ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_HidD_GetPreparsedData( %08x, %08x )"), HidDeviceObject, PreparsedData );
return FALSE; }
BOOLEAN __stdcall DIDummy_HidD_FreePreparsedData ( IN PHIDP_PREPARSED_DATA PreparsedData ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_HidD_FreePreparsedData( %08x )"), PreparsedData );
return FALSE; }
BOOLEAN __stdcall DIDummy_HidD_FlushQueue //unused
( IN HANDLE HidDeviceObject ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_HidD_FlushQueue( %08x )"), HidDeviceObject );
return FALSE; }
BOOLEAN __stdcall DIDummy_HidD_GetAttributes ( IN HANDLE HidDeviceObject, OUT PHIDD_ATTRIBUTES Attributes ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_HidD_GetAttributes( %08x, %08x )"), HidDeviceObject, Attributes );
return FALSE; }
BOOLEAN __stdcall DIDummy_HidD_GetFeature ( IN HANDLE HidDeviceObject, OUT PVOID ReportBuffer, IN ULONG ReportBufferLength ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_HidD_GetFeature( %08x, %08x, %u )"), HidDeviceObject, ReportBuffer, ReportBufferLength );
return FALSE; }
BOOLEAN __stdcall DIDummy_HidD_SetFeature ( IN HANDLE HidDeviceObject, IN PVOID ReportBuffer, IN ULONG ReportBufferLength ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_HidD_SetFeature( %08x, %08x, %u )"), HidDeviceObject, ReportBuffer, ReportBufferLength );
return FALSE; }
BOOLEAN __stdcall DIDummy_HidD_GetProductString ( IN HANDLE HidDeviceObject, OUT PVOID Buffer, IN ULONG BufferLength ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_HidD_GetProductString( %08x, %08x, %u )"), HidDeviceObject, Buffer, BufferLength );
return FALSE; }
BOOLEAN __stdcall DIDummy_HidD_GetInputReport ( IN HANDLE HidDeviceObject, OUT PVOID ReportBuffer, IN ULONG ReportBufferLength ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_HidD_GetProductString( %08x, %08x, %u )"), HidDeviceObject, ReportBuffer, ReportBufferLength );
return FALSE; }
NTSTATUS __stdcall DIDummy_HidP_GetCaps ( IN PHIDP_PREPARSED_DATA PreparsedData, OUT PHIDP_CAPS Capabilities ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_HidP_GetCaps( %08x, %08x )"), PreparsedData, Capabilities );
return HIDP_STATUS_NOT_IMPLEMENTED; }
NTSTATUS __stdcall DIDummy_HidP_GetButtonCaps ( IN HIDP_REPORT_TYPE ReportType, OUT PHIDP_BUTTON_CAPS ButtonCaps, IN OUT PUSHORT ButtonCapsLength, IN PHIDP_PREPARSED_DATA PreparsedData ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_HidP_GetButtonCaps( %08x, %08x, %08x, %08x )"), ReportType, ButtonCaps, ButtonCapsLength, PreparsedData );
return HIDP_STATUS_NOT_IMPLEMENTED; }
NTSTATUS __stdcall DIDummy_HidP_GetValueCaps ( IN HIDP_REPORT_TYPE ReportType, OUT PHIDP_VALUE_CAPS ValueCaps, IN OUT PUSHORT ValueCapsLength, IN PHIDP_PREPARSED_DATA PreparsedData ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_HidP_GetValueCaps( %08x, %08x, %08x, %08x )"), ReportType, ValueCaps, ValueCapsLength, PreparsedData );
return HIDP_STATUS_NOT_IMPLEMENTED; }
NTSTATUS __stdcall DIDummy_HidP_GetLinkCollectionNodes ( OUT PHIDP_LINK_COLLECTION_NODE LinkCollectionNodes, IN OUT PULONG LinkCollectionNodesLength, IN PHIDP_PREPARSED_DATA PreparsedData ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_HidP_GetLinkCollectionNodes( %08x, %08x, %08x )"), LinkCollectionNodes, LinkCollectionNodesLength, PreparsedData );
return HIDP_STATUS_NOT_IMPLEMENTED; }
ULONG __stdcall DIDummy_HidP_MaxDataListLength ( IN HIDP_REPORT_TYPE ReportType, IN PHIDP_PREPARSED_DATA PreparsedData ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_HidP_MaxDataListLength( %08x, %08x )"), ReportType, PreparsedData );
return 0; }
NTSTATUS __stdcall DIDummy_HidP_GetUsagesEx //unused
( IN HIDP_REPORT_TYPE ReportType, IN USHORT LinkCollection, OUT PUSAGE_AND_PAGE ButtonList, IN OUT ULONG * UsageLength, IN PHIDP_PREPARSED_DATA PreparsedData, IN PCHAR Report, IN ULONG ReportLength ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_HidP_GetUsagesEx( %08x, %u, %08x, %08x, %08x, %08x, %u )"), ReportType, LinkCollection, ButtonList, UsageLength, PreparsedData, Report, ReportLength ); return HIDP_STATUS_NOT_IMPLEMENTED; }
NTSTATUS __stdcall DIDummy_HidP_GetScaledUsageValue //unused
( IN HIDP_REPORT_TYPE ReportType, IN USAGE UsagePage, IN USHORT LinkCollection, IN USAGE Usage, OUT PLONG UsageValue, IN PHIDP_PREPARSED_DATA PreparsedData, IN PCHAR Report, IN ULONG ReportLength ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_HidP_GetScaledUsageValue( %08x, %u, %u, %u, %08x, %08x, %08x, %u )"), ReportType, UsagePage, LinkCollection, Usage, UsageValue, PreparsedData, Report, ReportLength );
return HIDP_STATUS_NOT_IMPLEMENTED; }
NTSTATUS __stdcall DIDummy_HidP_GetData ( IN HIDP_REPORT_TYPE ReportType, OUT PHIDP_DATA DataList, IN OUT PULONG DataLength, IN PHIDP_PREPARSED_DATA PreparsedData, IN PCHAR Report, IN ULONG ReportLength ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_HidP_GetData( %08x, %08x, $08x, %08x, %08x, %u )"), ReportType, DataList, DataLength, PreparsedData, Report, ReportLength );
return HIDP_STATUS_NOT_IMPLEMENTED; }
NTSTATUS __stdcall DIDummy_HidP_SetData ( IN HIDP_REPORT_TYPE ReportType, IN PHIDP_DATA DataList, IN OUT PULONG DataLength, IN PHIDP_PREPARSED_DATA PreparsedData, IN OUT PCHAR Report, IN ULONG ReportLength ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_HidP_SetData( %08x, %08x, $08x, %08x, %08x, %u )"), ReportType, DataList, DataLength, PreparsedData, Report, ReportLength );
return HIDP_STATUS_NOT_IMPLEMENTED; }
NTSTATUS __stdcall DIDummy_HidP_GetUsageValue ( IN HIDP_REPORT_TYPE ReportType, IN USAGE UsagePage, IN USHORT LinkCollection, IN USAGE Usage, OUT PULONG UsageValue, IN PHIDP_PREPARSED_DATA PreparsedData, IN PCHAR Report, IN ULONG ReportLength ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_HidP_GetUsageValue( %08x, %u, %u, %u, %08x, %08x, %08x, %u )"), ReportType, UsagePage, LinkCollection, Usage, UsageValue, PreparsedData, Report, ReportLength );
return HIDP_STATUS_NOT_IMPLEMENTED; }
ULONG __stdcall DIDummy_HidP_MaxUsageListLength ( IN HIDP_REPORT_TYPE ReportType, IN USAGE UsagePage, IN PHIDP_PREPARSED_DATA PreparsedData ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_HidP_MaxUsageListLength( %08x, %u, %08x )"), ReportType, UsagePage, PreparsedData );
return 0; }
NTSTATUS __stdcall DIDummy_HidP_GetSpecificButtonCaps ( IN HIDP_REPORT_TYPE ReportType, IN USAGE UsagePage, IN USHORT LinkCollection, IN USAGE Usage, OUT PHIDP_BUTTON_CAPS ButtonCaps, IN OUT PUSHORT ButtonCapsLength, IN PHIDP_PREPARSED_DATA PreparsedData ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_HidP_GetSpecificButtonCaps( %08x, %u, %u, %u, %08x, %08x, %08x )"), ReportType, UsagePage, LinkCollection, Usage, ButtonCaps, ButtonCapsLength, PreparsedData );
return HIDP_STATUS_NOT_IMPLEMENTED; }
NTSTATUS __stdcall DIDummy_HidP_TranslateUsagesToI8042ScanCodes ( IN PUSAGE ChangedUsageList, // Those usages that changed
IN ULONG UsageListLength, IN HIDP_KEYBOARD_DIRECTION KeyAction, IN OUT PHIDP_KEYBOARD_MODIFIER_STATE ModifierState, IN PHIDP_INSERT_SCANCODES InsertCodesProcedure, IN PVOID InsertCodesContext ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_HidP_TranslateUsagesToI8042ScanCodes( %08x, %u, %08x, %08x, %08x, %08x )"), ChangedUsageList, UsageListLength, KeyAction, ModifierState, InsertCodesProcedure, InsertCodesContext );
return HIDP_STATUS_NOT_IMPLEMENTED; }
////////////////////////////////////////
// winmm.dll dummy functions
////////////////////////////////////////
MMRESULT WINAPI DIDummy_joyGetDevCaps ( IN UINT uJoyID, OUT LPJOYCAPS pjc, IN UINT cbjc ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_joyGetDevCaps( %u, %08x, %u )"), uJoyID, pjc, cbjc );
return MMSYSERR_ERROR; }
MMRESULT WINAPI DIDummy_joyGetPosEx ( IN UINT uJoyID, OUT LPJOYINFOEX pji ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_joyGetPosEx( %u, %08x )"), uJoyID, pji );
return MMSYSERR_ERROR; }
MMRESULT WINAPI DIDummy_joyGetPos ( IN UINT uJoyID, OUT LPJOYINFO pji ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_joyGetPos( %u, %08x )"), uJoyID, pji );
return MMSYSERR_ERROR; }
UINT WINAPI DIDummy_joyConfigChanged ( IN DWORD dwFlags ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_joyConfigChanged( %u )"), dwFlags );
return MMSYSERR_ERROR; }
MMRESULT WINAPI DIDummy_mmioClose ( IN HMMIO hmmio, IN UINT fuClose ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_mmioClose( %08x, %u )"), hmmio, fuClose ); return MMSYSERR_ERROR; }
HMMIO WINAPI DIDummy_mmioOpenA ( IN OUT LPSTR pszFileName, IN OUT LPMMIOINFO pmmioinfo, IN DWORD fdwOpen ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_mmioOpenA( %s, %08x, %u )"), pszFileName, pmmioinfo, fdwOpen );
return NULL; }
MMRESULT WINAPI DIDummy_mmioDescend ( IN HMMIO hmmio, IN OUT LPMMCKINFO pmmcki, IN const MMCKINFO FAR* pmmckiParent, IN UINT fuDescend ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_mmioDescend( %08x, %08x, %08x, %u )"), hmmio, pmmcki, pmmckiParent, fuDescend );
return MMSYSERR_ERROR; }
MMRESULT WINAPI DIDummy_mmioCreateChunk ( IN HMMIO hmmio, IN LPMMCKINFO pmmcki, IN UINT fuCreate ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_mmioCreateChunk( %08x, %08x, %u )"), hmmio, pmmcki, fuCreate );
return MMSYSERR_ERROR; }
LONG WINAPI DIDummy_mmioRead ( IN HMMIO hmmio, OUT HPSTR pch, IN LONG cch ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_mmioRead( %08x, %08x, %u )"), hmmio, pch, cch ); return 0; }
LONG WINAPI DIDummy_mmioWrite ( IN HMMIO hmmio, IN const char _huge* pch, IN LONG cch ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_mmioWrite( %08x, %08x, %u )"), hmmio, pch, cch );
return 0; }
MMRESULT WINAPI DIDummy_mmioAscend ( IN HMMIO hmmio, IN LPMMCKINFO pmmcki, IN UINT fuAscend ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_mmioAscend( %08x, %08x, %u )"), hmmio, pmmcki, fuAscend ); return MMSYSERR_ERROR; }
////////////////////////////////////////
// user32.dll dummy functions
////////////////////////////////////////
#ifdef USE_WM_INPUT
BOOL WINAPI DIDummy_RegisterRawInputDevices ( PCRAWINPUTDEVICE pRawInputDevices, UINT uiNumDevices, UINT cbSize ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_RegisterRawInputDevices( %08x, %u, %u )"), pRawInputDevices, uiNumDevices, cbSize ); return FALSE; }
UINT WINAPI DIDummy_GetRawInputData ( HRAWINPUT hRawInput, UINT uiCommand, LPVOID pData, PUINT pcbSize, UINT cbSizeHeader ) { SquirtSqflPtszV( sqfl | sqflBenign, TEXT("DIDummy_GetRawInputData( %08x, %u, %08x, %08x, %u )"), hRawInput, uiCommand, pData, pcbSize, cbSizeHeader ); return -1; }
#endif //#ifdef USE_WM_INPUT
#endif /* STATIC_DLLUSAGE */
|