Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1306 lines
36 KiB

  1. /*****************************************************************************
  2. *
  3. * DIExtDll.c
  4. *
  5. * Copyright (c) 1997 Microsoft Corporation. All Rights Reserved.
  6. *
  7. * Abstract:
  8. *
  9. * Dynamic loading of optional external DLLs.
  10. *
  11. * Contents:
  12. *
  13. * ExtDll_Init
  14. * ExtDll_Term
  15. *
  16. *****************************************************************************/
  17. #include "dinputpr.h"
  18. /*****************************************************************************
  19. *
  20. * The sqiffle for this file.
  21. *
  22. *****************************************************************************/
  23. #define sqfl sqflExtDll
  24. #ifdef HID_SUPPORT
  25. /*****************************************************************************
  26. *
  27. * @define T | TEXT(ch) |
  28. *
  29. * Either "A" or "W", depending on whether we are building
  30. * the ANSI or UNICODE version.
  31. *
  32. *****************************************************************************/
  33. #ifdef UNICODE
  34. #define T "W"
  35. #else
  36. #define T "A"
  37. #endif
  38. /*****************************************************************************
  39. *
  40. * @define MAKEAPINAME | nm |
  41. *
  42. * Emit a c_sz that records the name of the API.
  43. *
  44. *****************************************************************************/
  45. #define MAKEAPINAME(nm) CHAR c_sz##nm[] = #nm
  46. #ifndef STATIC_DLLUSAGE
  47. /*****************************************************************************
  48. *
  49. * CFGMGR32
  50. *
  51. * Note that this must match the CFGMGR32 structure in dihid.h
  52. *
  53. *****************************************************************************/
  54. #pragma BEGIN_CONST_DATA
  55. MAKEAPINAME(CM_Get_Child);
  56. MAKEAPINAME(CM_Get_Sibling);
  57. MAKEAPINAME(CM_Get_Parent);
  58. MAKEAPINAME(CM_Get_DevNode_Registry_Property) T;
  59. MAKEAPINAME(CM_Set_DevNode_Registry_Property) T;
  60. MAKEAPINAME(CM_Get_Device_ID) T;
  61. #pragma END_CONST_DATA
  62. #ifndef WINNT
  63. LPSTR g_cfgmgr32_fn[] = {
  64. c_szCM_Get_Child,
  65. c_szCM_Get_Sibling,
  66. c_szCM_Get_Parent,
  67. c_szCM_Get_DevNode_Registry_Property,
  68. c_szCM_Set_DevNode_Registry_Property,
  69. c_szCM_Get_Device_ID
  70. };
  71. HINSTANCE g_hinstcfgmgr32;
  72. CFGMGR32 g_cfgmgr32 = {
  73. (FARPROC)DIDummy_CM_Get_Child,
  74. (FARPROC)DIDummy_CM_Get_Sibling,
  75. (FARPROC)DIDummy_CM_Get_Parent,
  76. (FARPROC)DIDummy_CM_Get_DevNode_Registry_Property,
  77. (FARPROC)DIDummy_CM_Set_DevNode_Registry_Property,
  78. (FARPROC)DIDummy_CM_Get_Device_ID
  79. };
  80. #endif //WINNT
  81. /*****************************************************************************
  82. *
  83. * SETUPAPI
  84. *
  85. * Note that this must match the SETUPAPI structure in dihid.h
  86. *
  87. *****************************************************************************/
  88. #pragma BEGIN_CONST_DATA
  89. MAKEAPINAME(SetupDiGetClassDevs) T;
  90. MAKEAPINAME(SetupDiDestroyDeviceInfoList);
  91. MAKEAPINAME(SetupDiGetDeviceInterfaceDetail) T;
  92. MAKEAPINAME(SetupDiEnumDeviceInterfaces);
  93. MAKEAPINAME(SetupDiCreateDeviceInterfaceRegKey) T;
  94. MAKEAPINAME(SetupDiCallClassInstaller);
  95. MAKEAPINAME(SetupDiGetDeviceRegistryProperty) T;
  96. MAKEAPINAME(SetupDiSetDeviceRegistryProperty) T;
  97. MAKEAPINAME(SetupDiGetDeviceInstanceId) T;
  98. MAKEAPINAME(SetupDiOpenDeviceInfo) T;
  99. MAKEAPINAME(SetupDiCreateDeviceInfoList);
  100. MAKEAPINAME(SetupDiOpenDevRegKey);
  101. #pragma END_CONST_DATA
  102. LPSTR g_setupapi_fn[] = {
  103. c_szSetupDiGetClassDevs,
  104. c_szSetupDiDestroyDeviceInfoList,
  105. c_szSetupDiGetDeviceInterfaceDetail,
  106. c_szSetupDiEnumDeviceInterfaces,
  107. c_szSetupDiCreateDeviceInterfaceRegKey,
  108. c_szSetupDiCallClassInstaller,
  109. c_szSetupDiGetDeviceRegistryProperty,
  110. c_szSetupDiSetDeviceRegistryProperty,
  111. c_szSetupDiGetDeviceInstanceId,
  112. c_szSetupDiOpenDeviceInfo,
  113. c_szSetupDiCreateDeviceInfoList,
  114. c_szSetupDiOpenDevRegKey,
  115. #ifdef WINNT
  116. c_szCM_Get_Child,
  117. c_szCM_Get_Sibling,
  118. c_szCM_Get_Parent,
  119. c_szCM_Get_DevNode_Registry_Property,
  120. c_szCM_Set_DevNode_Registry_Property,
  121. c_szCM_Get_Device_ID
  122. #endif
  123. };
  124. HINSTANCE g_hinstSetupapi;
  125. SETUPAPI g_setupapi = {
  126. (FARPROC)DIDummy_SetupDiGetClassDevs,
  127. (FARPROC)DIDummy_SetupDiDestroyDeviceInfoList,
  128. (FARPROC)DIDummy_SetupDiGetDeviceInterfaceDetail,
  129. (FARPROC)DIDummy_SetupDiEnumDeviceInterfaces,
  130. (FARPROC)DIDummy_SetupDiCreateDeviceInterfaceRegKey,
  131. (FARPROC)DIDummy_SetupDiCallClassInstaller,
  132. (FARPROC)DIDummy_SetupDiGetDeviceRegistryProperty,
  133. (FARPROC)DIDummy_SetupDiSetDeviceRegistryProperty,
  134. (FARPROC)DIDummy_SetupDiGetDeviceInstanceId,
  135. (FARPROC)DIDummy_SetupDiOpenDeviceInfo,
  136. (FARPROC)DIDummy_SetupDiCreateDeviceInfoList,
  137. (FARPROC)DIDummy_SetupDiOpenDevRegKey,
  138. #ifdef WINNT
  139. (FARPROC)DIDummy_CM_Get_Child,
  140. (FARPROC)DIDummy_CM_Get_Sibling,
  141. (FARPROC)DIDummy_CM_Get_Parent,
  142. (FARPROC)DIDummy_CM_Get_DevNode_Registry_Property,
  143. (FARPROC)DIDummy_CM_Set_DevNode_Registry_Property,
  144. (FARPROC)DIDummy_CM_Get_Device_ID
  145. #endif
  146. };
  147. /*****************************************************************************
  148. *
  149. * HIDDLL
  150. *
  151. * Note that this must match the HIDDLL structure in dihid.h
  152. *
  153. *****************************************************************************/
  154. #pragma BEGIN_CONST_DATA
  155. MAKEAPINAME(HidD_GetHidGuid);
  156. MAKEAPINAME(HidD_GetPreparsedData);
  157. MAKEAPINAME(HidD_FreePreparsedData);
  158. MAKEAPINAME(HidD_FlushQueue);
  159. MAKEAPINAME(HidD_GetAttributes);
  160. MAKEAPINAME(HidD_GetFeature);
  161. MAKEAPINAME(HidD_SetFeature);
  162. MAKEAPINAME(HidD_GetProductString);
  163. MAKEAPINAME(HidD_GetInputReport);
  164. MAKEAPINAME(HidP_GetCaps);
  165. MAKEAPINAME(HidP_GetButtonCaps);
  166. MAKEAPINAME(HidP_GetValueCaps);
  167. MAKEAPINAME(HidP_GetLinkCollectionNodes);
  168. MAKEAPINAME(HidP_MaxDataListLength);
  169. MAKEAPINAME(HidP_GetUsagesEx);
  170. MAKEAPINAME(HidP_GetScaledUsageValue);
  171. MAKEAPINAME(HidP_GetData);
  172. MAKEAPINAME(HidP_SetData);
  173. MAKEAPINAME(HidP_GetUsageValue);
  174. MAKEAPINAME(HidP_MaxUsageListLength);
  175. MAKEAPINAME(HidP_GetSpecificButtonCaps);
  176. #pragma END_CONST_DATA
  177. LPSTR g_hiddll_fn[] = {
  178. c_szHidD_GetHidGuid,
  179. c_szHidD_GetPreparsedData,
  180. c_szHidD_FreePreparsedData,
  181. c_szHidD_FlushQueue,
  182. c_szHidD_GetAttributes,
  183. c_szHidD_GetFeature,
  184. c_szHidD_SetFeature,
  185. c_szHidD_GetProductString,
  186. c_szHidD_GetInputReport,
  187. c_szHidP_GetCaps,
  188. c_szHidP_GetButtonCaps,
  189. c_szHidP_GetValueCaps,
  190. c_szHidP_GetLinkCollectionNodes,
  191. c_szHidP_MaxDataListLength,
  192. c_szHidP_GetUsagesEx,
  193. c_szHidP_GetScaledUsageValue,
  194. c_szHidP_GetData,
  195. c_szHidP_SetData,
  196. c_szHidP_GetUsageValue,
  197. c_szHidP_MaxUsageListLength,
  198. c_szHidP_GetSpecificButtonCaps,
  199. };
  200. HINSTANCE g_hinstHid;
  201. HIDDLL g_hiddll = {
  202. (FARPROC)DIDummy_HidD_GetHidGuid,
  203. (FARPROC)DIDummy_HidD_GetPreparsedData,
  204. (FARPROC)DIDummy_HidD_FreePreparsedData,
  205. (FARPROC)DIDummy_HidD_FlushQueue,
  206. (FARPROC)DIDummy_HidD_GetAttributes,
  207. (FARPROC)DIDummy_HidD_GetFeature,
  208. (FARPROC)DIDummy_HidD_SetFeature,
  209. (FARPROC)DIDummy_HidD_GetProductString,
  210. (FARPROC)DIDummy_HidD_GetInputReport,
  211. (FARPROC)DIDummy_HidP_GetCaps,
  212. (FARPROC)DIDummy_HidP_GetButtonCaps,
  213. (FARPROC)DIDummy_HidP_GetValueCaps,
  214. (FARPROC)DIDummy_HidP_GetLinkCollectionNodes,
  215. (FARPROC)DIDummy_HidP_MaxDataListLength,
  216. (FARPROC)DIDummy_HidP_GetUsagesEx,
  217. (FARPROC)DIDummy_HidP_GetScaledUsageValue,
  218. (FARPROC)DIDummy_HidP_GetData,
  219. (FARPROC)DIDummy_HidP_SetData,
  220. (FARPROC)DIDummy_HidP_GetUsageValue,
  221. (FARPROC)DIDummy_HidP_MaxUsageListLength,
  222. (FARPROC)DIDummy_HidP_GetSpecificButtonCaps,
  223. };
  224. /*****************************************************************************
  225. *
  226. * Winmm
  227. *
  228. * Note that this must match the Winmm structure in dihid.h
  229. *
  230. *****************************************************************************/
  231. #pragma BEGIN_CONST_DATA
  232. MAKEAPINAME(joyGetDevCaps) T;
  233. MAKEAPINAME(joyGetPosEx);
  234. MAKEAPINAME(joyGetPos);
  235. MAKEAPINAME(joyConfigChanged);
  236. #pragma END_CONST_DATA
  237. LPSTR g_winmmdll_fn[] = {
  238. c_szjoyGetDevCaps,
  239. c_szjoyGetPosEx,
  240. c_szjoyGetPos,
  241. c_szjoyConfigChanged,
  242. };
  243. HINSTANCE g_hinstwinmmdll;
  244. WINMMDLL g_winmmdll = {
  245. (FARPROC)DIDummy_joyGetDevCaps,
  246. (FARPROC)DIDummy_joyGetPosEx,
  247. (FARPROC)DIDummy_joyGetPos,
  248. (FARPROC)DIDummy_joyConfigChanged,
  249. };
  250. /*****************************************************************************
  251. *
  252. * User32
  253. *
  254. * Note that this must match the User32 structure in dihid.h
  255. *
  256. *****************************************************************************/
  257. #ifdef USE_WM_INPUT
  258. #pragma BEGIN_CONST_DATA
  259. MAKEAPINAME(RegisterRawInputDevices);
  260. MAKEAPINAME(GetRawInputData);
  261. #pragma END_CONST_DATA
  262. LPSTR g_user32_fn[] = {
  263. c_szRegisterRawInputDevices,
  264. c_szGetRawInputData,
  265. };
  266. HINSTANCE g_hinstuser32;
  267. USER32 g_user32 = {
  268. (FARPROC)DIDummy_RegisterRawInputDevices,
  269. (FARPROC)DIDummy_GetRawInputData,
  270. };
  271. #endif
  272. /*****************************************************************************
  273. *
  274. * @doc INTERNAL
  275. *
  276. * @func HINSTANCE | ExtDll_LoadDll |
  277. *
  278. * Loads a DLL and resolves all the imports.
  279. *
  280. * @parm LPCTSTR | ptszName |
  281. *
  282. * The name of the DLL to load.
  283. *
  284. * @parm PMANUALIMPORT | rgmi |
  285. *
  286. * Array of <t MANUALIMPORT> structures to resolve.
  287. *
  288. * @parm int | cmi |
  289. *
  290. * Number of <t MANUALIMPORT> structures to resolve.
  291. *
  292. * @parm LPSTR * | ppszProcName |
  293. *
  294. * Function names.
  295. *
  296. * @returns
  297. *
  298. * Returns the instance handle of the DLL if one or more of the imports
  299. * were resolved successfully; otherwise, unloads the DLL
  300. * and returns 0.
  301. *
  302. * If none of the imports was resolved successfully, the value
  303. * of the entries of <p rgmi> are not changed.
  304. *
  305. *****************************************************************************/
  306. HINSTANCE INTERNAL
  307. ExtDll_LoadDll(LPCTSTR ptszName, PMANUALIMPORT rgmi, int cmi, LPSTR *ppszProcName)
  308. {
  309. HINSTANCE hinst = 0;
  310. BOOL fNeedFreeLib = TRUE;
  311. EnterProcR(ExtDll_LoadDll, (_ "spuup", ptszName, rgmi, cmi, ppszProcName));
  312. hinst = LoadLibrary(ptszName);
  313. if(hinst)
  314. {
  315. int imi;
  316. FARPROC fp;
  317. for(imi = 0; imi < cmi; imi++)
  318. {
  319. fp = GetProcAddress(hinst, ppszProcName[imi]);
  320. if( fp ) {
  321. rgmi[imi].pfn = fp;
  322. fNeedFreeLib = FALSE;
  323. }
  324. }
  325. }
  326. if( fNeedFreeLib ) {
  327. FreeLibrary(hinst);
  328. hinst = 0;
  329. }
  330. ExitProcX((UINT_PTR)hinst);
  331. return hinst;
  332. }
  333. /*****************************************************************************
  334. *
  335. * @doc INTERNAL
  336. *
  337. * @func void | ExtDll_Init |
  338. *
  339. * Try to load our optional DLLs. Don't get upset if they
  340. * don't load.
  341. *
  342. *****************************************************************************/
  343. void EXTERNAL
  344. ExtDll_Init(void)
  345. {
  346. g_hinstHid = ExtDll_LoadDll(TEXT("HID.DLL"),
  347. g_hiddll.rgmi,
  348. cA(g_hiddll.rgmi),
  349. g_hiddll_fn );
  350. g_hinstSetupapi = ExtDll_LoadDll(TEXT("SETUPAPI.DLL"),
  351. g_setupapi.rgmi,
  352. cA(g_setupapi.rgmi),
  353. g_setupapi_fn );
  354. #ifndef WINNT
  355. g_hinstcfgmgr32 = ExtDll_LoadDll( TEXT("CFGMGR32.DLL" ),
  356. g_cfgmgr32.rgmi,
  357. cA(g_cfgmgr32.rgmi),
  358. g_cfgmgr32_fn );
  359. g_hinstwinmmdll = ExtDll_LoadDll( TEXT("WINMM.DLL" ),
  360. g_winmmdll.rgmi,
  361. cA(g_winmmdll.rgmi),
  362. g_winmmdll_fn );
  363. #endif
  364. #ifdef USE_WM_INPUT
  365. g_hinstuser32 = ExtDll_LoadDll( TEXT("USER32.DLL" ),
  366. g_user32.rgmi,
  367. cA(g_user32.rgmi),
  368. g_user32_fn );
  369. #endif
  370. }
  371. #endif /* STATIC_DLLUSAGE */
  372. /*****************************************************************************
  373. *
  374. * @doc INTERNAL
  375. *
  376. * @func void | ExtDll_Term |
  377. *
  378. * Unload any optional DLLs that we loaded.
  379. *
  380. *****************************************************************************/
  381. void EXTERNAL
  382. ExtDll_Term(void)
  383. {
  384. #ifndef STATIC_DLLUSAGE
  385. if(g_hinstSetupapi)
  386. {
  387. #endif /* STATIC_DLLUSAGE */
  388. DllEnterCrit();
  389. if(g_phdl)
  390. {
  391. DIHid_EmptyHidList();
  392. FreePpv(&g_phdl);
  393. }
  394. DIBus_FreeMemory();
  395. DllLeaveCrit();
  396. #ifndef STATIC_DLLUSAGE
  397. FreeLibrary(g_hinstSetupapi);
  398. g_hinstSetupapi = NULL;
  399. }
  400. #ifndef WINNT
  401. if(g_hinstcfgmgr32)
  402. {
  403. FreeLibrary(g_hinstcfgmgr32);
  404. g_hinstcfgmgr32 = NULL;
  405. }
  406. #endif
  407. if(g_hinstHid)
  408. {
  409. FreeLibrary(g_hinstHid);
  410. g_hinstHid = NULL;
  411. }
  412. if( g_hinstwinmmdll)
  413. {
  414. FreeLibrary(g_hinstwinmmdll);
  415. g_hinstwinmmdll = NULL;
  416. }
  417. #ifdef USE_WM_INPUT
  418. if( g_hinstuser32)
  419. {
  420. FreeLibrary(g_hinstuser32);
  421. g_hinstuser32 = NULL;
  422. }
  423. #endif
  424. #endif /* STATIC_DLLUSAGE */
  425. }
  426. #ifndef STATIC_DLLUSAGE
  427. ////////////////////////////////////////
  428. // cfgmgr32.dll dummy functions
  429. ////////////////////////////////////////
  430. CONFIGRET WINAPI DIDummy_CM_Get_Child
  431. (
  432. OUT PDEVINST pdnDevInst,
  433. IN DEVINST dnDevInst,
  434. IN ULONG ulFlags
  435. )
  436. {
  437. SquirtSqflPtszV( sqfl | sqflBenign,
  438. TEXT("DIDummy_CM_Get_Child( %08x, %08x, %u )"),
  439. pdnDevInst, dnDevInst, ulFlags );
  440. return CR_FAILURE;
  441. }
  442. CONFIGRET WINAPI DIDummy_CM_Get_Sibling
  443. (
  444. OUT PDEVINST pdnDevInst,
  445. IN DEVINST DevInst,
  446. IN ULONG ulFlags
  447. )
  448. {
  449. SquirtSqflPtszV( sqfl | sqflBenign,
  450. TEXT("DIDummy_CM_Get_Sibling( %08x, %08x, %u )"),
  451. pdnDevInst, DevInst, ulFlags );
  452. return CR_FAILURE;
  453. }
  454. CONFIGRET WINAPI DIDummy_CM_Get_Parent
  455. (
  456. OUT PDEVINST pdnDevInst,
  457. IN DEVINST dnDevInst,
  458. IN ULONG ulFlags
  459. )
  460. {
  461. SquirtSqflPtszV( sqfl | sqflBenign,
  462. TEXT("DIDummy_CM_Get_Parent( %08x, %08x, %u )"),
  463. pdnDevInst, dnDevInst, ulFlags );
  464. return CR_FAILURE;
  465. }
  466. CONFIGRET WINAPI DIDummy_CM_Get_DevNode_Registry_Property
  467. (
  468. IN DEVINST dnDevInst,
  469. IN ULONG ulProperty,
  470. OUT PULONG pulRegDataType, OPTIONAL
  471. OUT PVOID Buffer, OPTIONAL
  472. IN OUT PULONG pulLength,
  473. IN ULONG ulFlags
  474. )
  475. {
  476. SquirtSqflPtszV( sqfl | sqflBenign,
  477. TEXT("DIDummy_CM_Get_DevNode_Registry_Property( %08x, %u, %08x, %08x, %08x, %u )"),
  478. dnDevInst, ulProperty, pulRegDataType, Buffer, pulLength, ulFlags );
  479. return CR_FAILURE;
  480. }
  481. CONFIGRET WINAPI DIDummy_CM_Set_DevNode_Registry_Property
  482. (
  483. IN DEVINST dnDevInst,
  484. IN ULONG ulProperty,
  485. IN PVOID Buffer, OPTIONAL
  486. IN ULONG ulLength,
  487. IN ULONG ulFlags
  488. )
  489. {
  490. SquirtSqflPtszV( sqfl | sqflBenign,
  491. TEXT("DIDummy_CM_Set_DevNode_Registry_Property( %08x, %u, %08x, %u, %u )"),
  492. dnDevInst, ulProperty, Buffer, ulLength, ulFlags );
  493. return CR_FAILURE;
  494. }
  495. CONFIGRET WINAPI DIDummy_CM_Get_Device_ID
  496. (
  497. IN DEVINST dnDevInst,
  498. OUT PTCHAR Buffer,
  499. IN ULONG BufferLen,
  500. IN ULONG ulFlags
  501. )
  502. {
  503. SquirtSqflPtszV( sqfl | sqflBenign,
  504. TEXT("DIDummy_CM_Get_Device_ID( %08x, %08x, %u, %u )"),
  505. dnDevInst, Buffer, BufferLen, ulFlags );
  506. return CR_FAILURE;
  507. }
  508. ////////////////////////////////////////
  509. //Setupapi.dll dummy functions
  510. ////////////////////////////////////////
  511. HDEVINFO WINAPI DIDummy_SetupDiGetClassDevs
  512. (
  513. IN LPGUID ClassGuid, OPTIONAL
  514. IN LPCTSTR Enumerator, OPTIONAL
  515. IN HWND hwndParent, OPTIONAL
  516. IN DWORD Flags
  517. )
  518. {
  519. SquirtSqflPtszV( sqfl | sqflBenign,
  520. TEXT("DIDummy_SetupDiGetClassDevs( %08x, %08x, %08x, %u )"),
  521. ClassGuid, Enumerator, hwndParent, Flags );
  522. return INVALID_HANDLE_VALUE;
  523. }
  524. BOOL WINAPI DIDummy_SetupDiDestroyDeviceInfoList
  525. (
  526. IN HDEVINFO DeviceInfoSet
  527. )
  528. {
  529. SquirtSqflPtszV( sqfl | sqflBenign,
  530. TEXT("DIDummy_SetupDiDestroyDeviceInfoList( %08x )"),
  531. DeviceInfoSet );
  532. return FALSE;
  533. }
  534. BOOL WINAPI DIDummy_SetupDiGetDeviceInterfaceDetail
  535. (
  536. IN HDEVINFO DeviceInfoSet,
  537. IN PSP_DEVICE_INTERFACE_DATA pdid,
  538. OUT PSP_DEVICE_INTERFACE_DETAIL_DATA pdidd, OPTIONAL
  539. IN DWORD cbDidd,
  540. OUT PDWORD RequiredSize, OPTIONAL
  541. OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL
  542. )
  543. {
  544. SquirtSqflPtszV( sqfl | sqflBenign,
  545. TEXT("DIDummy_SetupDiGetDeviceInterfaceDetail( %08x, %08x, %08x, %u, %08x, %08x )"),
  546. DeviceInfoSet, pdid, pdidd, cbDidd, RequiredSize, DeviceInfoData );
  547. return FALSE;
  548. }
  549. BOOL WINAPI DIDummy_SetupDiEnumDeviceInterfaces
  550. (
  551. IN HDEVINFO DeviceInfoSet,
  552. IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL
  553. IN LPGUID InterfaceClassGuid,
  554. IN DWORD MemberIndex,
  555. OUT PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData
  556. )
  557. {
  558. SquirtSqflPtszV( sqfl | sqflBenign,
  559. TEXT("DIDummy_SetupDiEnumDeviceInterfaces( %08x, %08x, %08x, %u, %08x )"),
  560. DeviceInfoSet, DeviceInfoData, InterfaceClassGuid, MemberIndex, DeviceInterfaceData );
  561. return FALSE;
  562. }
  563. HKEY WINAPI DIDummy_SetupDiCreateDeviceInterfaceRegKey
  564. (
  565. IN HDEVINFO hdev,
  566. IN PSP_DEVICE_INTERFACE_DATA pdid,
  567. IN DWORD Reserved,
  568. IN REGSAM samDesired,
  569. IN HINF InfHandle, OPTIONAL
  570. IN PCSTR InfSectionName OPTIONAL
  571. )
  572. {
  573. SquirtSqflPtszV( sqfl | sqflBenign,
  574. TEXT("DIDummy_SetupDiCreateDeviceInterfaceRegKey( %08x, %08x, %u, %u, %08x, %s )"),
  575. hdev, pdid, Reserved, samDesired, InfHandle, InfSectionName );
  576. return INVALID_HANDLE_VALUE;
  577. }
  578. BOOL WINAPI DIDummy_SetupDiCallClassInstaller
  579. (
  580. IN DI_FUNCTION InstallFunction,
  581. IN HDEVINFO DeviceInfoSet,
  582. IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL
  583. )
  584. {
  585. SquirtSqflPtszV( sqfl | sqflBenign,
  586. TEXT("DIDummy_SetupDiCallClassInstaller( %08x, %08x, %08x )"),
  587. InstallFunction, DeviceInfoSet, DeviceInfoData );
  588. return FALSE;
  589. }
  590. BOOL WINAPI DIDummy_SetupDiGetDeviceRegistryProperty
  591. (
  592. IN HDEVINFO DeviceInfoSet,
  593. IN PSP_DEVINFO_DATA DeviceInfoData,
  594. IN DWORD Property,
  595. OUT PDWORD PropertyRegDataType, OPTIONAL
  596. OUT PBYTE PropertyBuffer,
  597. IN DWORD PropertyBufferSize,
  598. OUT PDWORD RequiredSize OPTIONAL
  599. )
  600. {
  601. SquirtSqflPtszV( sqfl | sqflBenign,
  602. TEXT("DIDummy_SetupDiGetDeviceRegistryProperty( %08x, %08x, %u, %08x, %08x, %u, %08x )"),
  603. DeviceInfoSet, DeviceInfoData, Property, PropertyRegDataType, PropertyBuffer, PropertyBufferSize, RequiredSize );
  604. return FALSE;
  605. }
  606. BOOL WINAPI DIDummy_SetupDiSetDeviceRegistryProperty
  607. (
  608. IN HDEVINFO DeviceInfoSet,
  609. IN OUT PSP_DEVINFO_DATA DeviceInfoData,
  610. IN DWORD Property,
  611. IN CONST BYTE* PropertyBuffer,
  612. IN DWORD PropertyBufferSize
  613. )
  614. {
  615. SquirtSqflPtszV( sqfl | sqflBenign,
  616. TEXT("DIDummy_SetupDiGetDeviceInstanceId( %08x, %08x, %u, %08x, %u )"),
  617. DeviceInfoSet, DeviceInfoData, Property, PropertyBuffer, PropertyBufferSize );
  618. return FALSE;
  619. }
  620. BOOL WINAPI DIDummy_SetupDiGetDeviceInstanceId
  621. (
  622. IN HDEVINFO DeviceInfoSet,
  623. IN PSP_DEVINFO_DATA DeviceInfoData,
  624. OUT PTSTR DeviceInstanceId,
  625. IN DWORD DeviceInstanceIdSize,
  626. OUT PDWORD RequiredSize OPTIONAL
  627. )
  628. {
  629. SquirtSqflPtszV( sqfl | sqflBenign,
  630. TEXT("DIDummy_SetupDiGetDeviceInstanceId( %08x, %08x, %08x, %u, %08x )"),
  631. DeviceInfoSet, DeviceInfoData, DeviceInstanceId, DeviceInstanceIdSize, RequiredSize );
  632. return FALSE;
  633. }
  634. BOOL WINAPI DIDummy_SetupDiOpenDeviceInfo
  635. (
  636. IN HDEVINFO DeviceInfoSet,
  637. IN LPCTSTR DeviceInstanceId,
  638. IN HWND hwndParent, OPTIONAL
  639. IN DWORD OpenFlags,
  640. OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL
  641. )
  642. {
  643. SquirtSqflPtszV( sqfl | sqflBenign,
  644. TEXT("DIDummy_SetupDiOpenDeviceInfo( %08x, %08x, %08x, %u, %08x )"),
  645. DeviceInfoSet, DeviceInstanceId, hwndParent, OpenFlags, DeviceInfoData );
  646. return FALSE;
  647. }
  648. HDEVINFO WINAPI DIDummy_SetupDiCreateDeviceInfoList
  649. (
  650. IN LPGUID ClassGuid, OPTIONAL
  651. IN HWND hwndParent OPTIONAL
  652. )
  653. {
  654. SquirtSqflPtszV( sqfl | sqflBenign,
  655. TEXT("DIDummy_SetupDiCreateDeviceInfoList( %08x, %08x )"),
  656. ClassGuid, hwndParent );
  657. return INVALID_HANDLE_VALUE;
  658. }
  659. HKEY WINAPI DIDummy_SetupDiOpenDevRegKey
  660. (
  661. IN HDEVINFO DeviceInfoSet,
  662. IN PSP_DEVINFO_DATA DeviceInfoData,
  663. IN DWORD Scope,
  664. IN DWORD HwProfile,
  665. IN DWORD KeyType,
  666. IN REGSAM samDesired
  667. )
  668. {
  669. SquirtSqflPtszV( sqfl | sqflBenign,
  670. TEXT("DIDummy_SetupDiOpenDevRegKey( %08x, %08x, %u, %u, %u, %u )"),
  671. DeviceInfoSet, DeviceInfoData, Scope, HwProfile, KeyType, samDesired );
  672. return INVALID_HANDLE_VALUE;
  673. }
  674. ////////////////////////////////////////
  675. // hid.dll dummy functions
  676. ////////////////////////////////////////
  677. void __stdcall DIDummy_HidD_GetHidGuid
  678. (
  679. OUT LPGUID HidGuid
  680. )
  681. {
  682. SquirtSqflPtszV( sqfl | sqflBenign,
  683. TEXT("DIDummy_HidD_GetHidGuid( %08x )"),
  684. HidGuid );
  685. return;
  686. }
  687. BOOLEAN __stdcall DIDummy_HidD_GetPreparsedData
  688. (
  689. IN HANDLE HidDeviceObject,
  690. OUT PHIDP_PREPARSED_DATA * PreparsedData
  691. )
  692. {
  693. SquirtSqflPtszV( sqfl | sqflBenign,
  694. TEXT("DIDummy_HidD_GetPreparsedData( %08x, %08x )"),
  695. HidDeviceObject, PreparsedData );
  696. return FALSE;
  697. }
  698. BOOLEAN __stdcall DIDummy_HidD_FreePreparsedData
  699. (
  700. IN PHIDP_PREPARSED_DATA PreparsedData
  701. )
  702. {
  703. SquirtSqflPtszV( sqfl | sqflBenign,
  704. TEXT("DIDummy_HidD_FreePreparsedData( %08x )"),
  705. PreparsedData );
  706. return FALSE;
  707. }
  708. BOOLEAN __stdcall DIDummy_HidD_FlushQueue //unused
  709. (
  710. IN HANDLE HidDeviceObject
  711. )
  712. {
  713. SquirtSqflPtszV( sqfl | sqflBenign,
  714. TEXT("DIDummy_HidD_FlushQueue( %08x )"),
  715. HidDeviceObject );
  716. return FALSE;
  717. }
  718. BOOLEAN __stdcall DIDummy_HidD_GetAttributes
  719. (
  720. IN HANDLE HidDeviceObject,
  721. OUT PHIDD_ATTRIBUTES Attributes
  722. )
  723. {
  724. SquirtSqflPtszV( sqfl | sqflBenign,
  725. TEXT("DIDummy_HidD_GetAttributes( %08x, %08x )"),
  726. HidDeviceObject, Attributes );
  727. return FALSE;
  728. }
  729. BOOLEAN __stdcall DIDummy_HidD_GetFeature
  730. (
  731. IN HANDLE HidDeviceObject,
  732. OUT PVOID ReportBuffer,
  733. IN ULONG ReportBufferLength
  734. )
  735. {
  736. SquirtSqflPtszV( sqfl | sqflBenign,
  737. TEXT("DIDummy_HidD_GetFeature( %08x, %08x, %u )"),
  738. HidDeviceObject, ReportBuffer, ReportBufferLength );
  739. return FALSE;
  740. }
  741. BOOLEAN __stdcall DIDummy_HidD_SetFeature
  742. (
  743. IN HANDLE HidDeviceObject,
  744. IN PVOID ReportBuffer,
  745. IN ULONG ReportBufferLength
  746. )
  747. {
  748. SquirtSqflPtszV( sqfl | sqflBenign,
  749. TEXT("DIDummy_HidD_SetFeature( %08x, %08x, %u )"),
  750. HidDeviceObject, ReportBuffer, ReportBufferLength );
  751. return FALSE;
  752. }
  753. BOOLEAN __stdcall DIDummy_HidD_GetProductString
  754. (
  755. IN HANDLE HidDeviceObject,
  756. OUT PVOID Buffer,
  757. IN ULONG BufferLength
  758. )
  759. {
  760. SquirtSqflPtszV( sqfl | sqflBenign,
  761. TEXT("DIDummy_HidD_GetProductString( %08x, %08x, %u )"),
  762. HidDeviceObject, Buffer, BufferLength );
  763. return FALSE;
  764. }
  765. BOOLEAN __stdcall DIDummy_HidD_GetInputReport
  766. (
  767. IN HANDLE HidDeviceObject,
  768. OUT PVOID ReportBuffer,
  769. IN ULONG ReportBufferLength
  770. )
  771. {
  772. SquirtSqflPtszV( sqfl | sqflBenign,
  773. TEXT("DIDummy_HidD_GetProductString( %08x, %08x, %u )"),
  774. HidDeviceObject, ReportBuffer, ReportBufferLength );
  775. return FALSE;
  776. }
  777. NTSTATUS __stdcall DIDummy_HidP_GetCaps
  778. (
  779. IN PHIDP_PREPARSED_DATA PreparsedData,
  780. OUT PHIDP_CAPS Capabilities
  781. )
  782. {
  783. SquirtSqflPtszV( sqfl | sqflBenign,
  784. TEXT("DIDummy_HidP_GetCaps( %08x, %08x )"),
  785. PreparsedData, Capabilities );
  786. return HIDP_STATUS_NOT_IMPLEMENTED;
  787. }
  788. NTSTATUS __stdcall DIDummy_HidP_GetButtonCaps
  789. (
  790. IN HIDP_REPORT_TYPE ReportType,
  791. OUT PHIDP_BUTTON_CAPS ButtonCaps,
  792. IN OUT PUSHORT ButtonCapsLength,
  793. IN PHIDP_PREPARSED_DATA PreparsedData
  794. )
  795. {
  796. SquirtSqflPtszV( sqfl | sqflBenign,
  797. TEXT("DIDummy_HidP_GetButtonCaps( %08x, %08x, %08x, %08x )"),
  798. ReportType, ButtonCaps, ButtonCapsLength, PreparsedData );
  799. return HIDP_STATUS_NOT_IMPLEMENTED;
  800. }
  801. NTSTATUS __stdcall DIDummy_HidP_GetValueCaps
  802. (
  803. IN HIDP_REPORT_TYPE ReportType,
  804. OUT PHIDP_VALUE_CAPS ValueCaps,
  805. IN OUT PUSHORT ValueCapsLength,
  806. IN PHIDP_PREPARSED_DATA PreparsedData
  807. )
  808. {
  809. SquirtSqflPtszV( sqfl | sqflBenign,
  810. TEXT("DIDummy_HidP_GetValueCaps( %08x, %08x, %08x, %08x )"),
  811. ReportType, ValueCaps, ValueCapsLength, PreparsedData );
  812. return HIDP_STATUS_NOT_IMPLEMENTED;
  813. }
  814. NTSTATUS __stdcall DIDummy_HidP_GetLinkCollectionNodes
  815. (
  816. OUT PHIDP_LINK_COLLECTION_NODE LinkCollectionNodes,
  817. IN OUT PULONG LinkCollectionNodesLength,
  818. IN PHIDP_PREPARSED_DATA PreparsedData
  819. )
  820. {
  821. SquirtSqflPtszV( sqfl | sqflBenign,
  822. TEXT("DIDummy_HidP_GetLinkCollectionNodes( %08x, %08x, %08x )"),
  823. LinkCollectionNodes, LinkCollectionNodesLength, PreparsedData );
  824. return HIDP_STATUS_NOT_IMPLEMENTED;
  825. }
  826. ULONG __stdcall DIDummy_HidP_MaxDataListLength
  827. (
  828. IN HIDP_REPORT_TYPE ReportType,
  829. IN PHIDP_PREPARSED_DATA PreparsedData
  830. )
  831. {
  832. SquirtSqflPtszV( sqfl | sqflBenign,
  833. TEXT("DIDummy_HidP_MaxDataListLength( %08x, %08x )"),
  834. ReportType, PreparsedData );
  835. return 0;
  836. }
  837. NTSTATUS __stdcall DIDummy_HidP_GetUsagesEx //unused
  838. (
  839. IN HIDP_REPORT_TYPE ReportType,
  840. IN USHORT LinkCollection,
  841. OUT PUSAGE_AND_PAGE ButtonList,
  842. IN OUT ULONG * UsageLength,
  843. IN PHIDP_PREPARSED_DATA PreparsedData,
  844. IN PCHAR Report,
  845. IN ULONG ReportLength
  846. )
  847. {
  848. SquirtSqflPtszV( sqfl | sqflBenign,
  849. TEXT("DIDummy_HidP_GetUsagesEx( %08x, %u, %08x, %08x, %08x, %08x, %u )"),
  850. ReportType, LinkCollection, ButtonList, UsageLength, PreparsedData, Report, ReportLength );
  851. return HIDP_STATUS_NOT_IMPLEMENTED;
  852. }
  853. NTSTATUS __stdcall DIDummy_HidP_GetScaledUsageValue //unused
  854. (
  855. IN HIDP_REPORT_TYPE ReportType,
  856. IN USAGE UsagePage,
  857. IN USHORT LinkCollection,
  858. IN USAGE Usage,
  859. OUT PLONG UsageValue,
  860. IN PHIDP_PREPARSED_DATA PreparsedData,
  861. IN PCHAR Report,
  862. IN ULONG ReportLength
  863. )
  864. {
  865. SquirtSqflPtszV( sqfl | sqflBenign,
  866. TEXT("DIDummy_HidP_GetScaledUsageValue( %08x, %u, %u, %u, %08x, %08x, %08x, %u )"),
  867. ReportType, UsagePage, LinkCollection, Usage, UsageValue, PreparsedData, Report, ReportLength );
  868. return HIDP_STATUS_NOT_IMPLEMENTED;
  869. }
  870. NTSTATUS __stdcall DIDummy_HidP_GetData
  871. (
  872. IN HIDP_REPORT_TYPE ReportType,
  873. OUT PHIDP_DATA DataList,
  874. IN OUT PULONG DataLength,
  875. IN PHIDP_PREPARSED_DATA PreparsedData,
  876. IN PCHAR Report,
  877. IN ULONG ReportLength
  878. )
  879. {
  880. SquirtSqflPtszV( sqfl | sqflBenign,
  881. TEXT("DIDummy_HidP_GetData( %08x, %08x, $08x, %08x, %08x, %u )"),
  882. ReportType, DataList, DataLength, PreparsedData, Report, ReportLength );
  883. return HIDP_STATUS_NOT_IMPLEMENTED;
  884. }
  885. NTSTATUS __stdcall DIDummy_HidP_SetData
  886. (
  887. IN HIDP_REPORT_TYPE ReportType,
  888. IN PHIDP_DATA DataList,
  889. IN OUT PULONG DataLength,
  890. IN PHIDP_PREPARSED_DATA PreparsedData,
  891. IN OUT PCHAR Report,
  892. IN ULONG ReportLength
  893. )
  894. {
  895. SquirtSqflPtszV( sqfl | sqflBenign,
  896. TEXT("DIDummy_HidP_SetData( %08x, %08x, $08x, %08x, %08x, %u )"),
  897. ReportType, DataList, DataLength, PreparsedData, Report, ReportLength );
  898. return HIDP_STATUS_NOT_IMPLEMENTED;
  899. }
  900. NTSTATUS __stdcall DIDummy_HidP_GetUsageValue
  901. (
  902. IN HIDP_REPORT_TYPE ReportType,
  903. IN USAGE UsagePage,
  904. IN USHORT LinkCollection,
  905. IN USAGE Usage,
  906. OUT PULONG UsageValue,
  907. IN PHIDP_PREPARSED_DATA PreparsedData,
  908. IN PCHAR Report,
  909. IN ULONG ReportLength
  910. )
  911. {
  912. SquirtSqflPtszV( sqfl | sqflBenign,
  913. TEXT("DIDummy_HidP_GetUsageValue( %08x, %u, %u, %u, %08x, %08x, %08x, %u )"),
  914. ReportType, UsagePage, LinkCollection, Usage, UsageValue, PreparsedData, Report, ReportLength );
  915. return HIDP_STATUS_NOT_IMPLEMENTED;
  916. }
  917. ULONG __stdcall DIDummy_HidP_MaxUsageListLength
  918. (
  919. IN HIDP_REPORT_TYPE ReportType,
  920. IN USAGE UsagePage,
  921. IN PHIDP_PREPARSED_DATA PreparsedData
  922. )
  923. {
  924. SquirtSqflPtszV( sqfl | sqflBenign,
  925. TEXT("DIDummy_HidP_MaxUsageListLength( %08x, %u, %08x )"),
  926. ReportType, UsagePage, PreparsedData );
  927. return 0;
  928. }
  929. NTSTATUS __stdcall DIDummy_HidP_GetSpecificButtonCaps
  930. (
  931. IN HIDP_REPORT_TYPE ReportType,
  932. IN USAGE UsagePage,
  933. IN USHORT LinkCollection,
  934. IN USAGE Usage,
  935. OUT PHIDP_BUTTON_CAPS ButtonCaps,
  936. IN OUT PUSHORT ButtonCapsLength,
  937. IN PHIDP_PREPARSED_DATA PreparsedData
  938. )
  939. {
  940. SquirtSqflPtszV( sqfl | sqflBenign,
  941. TEXT("DIDummy_HidP_GetSpecificButtonCaps( %08x, %u, %u, %u, %08x, %08x, %08x )"),
  942. ReportType, UsagePage, LinkCollection, Usage, ButtonCaps, ButtonCapsLength, PreparsedData );
  943. return HIDP_STATUS_NOT_IMPLEMENTED;
  944. }
  945. NTSTATUS __stdcall DIDummy_HidP_TranslateUsagesToI8042ScanCodes
  946. (
  947. IN PUSAGE ChangedUsageList, // Those usages that changed
  948. IN ULONG UsageListLength,
  949. IN HIDP_KEYBOARD_DIRECTION KeyAction,
  950. IN OUT PHIDP_KEYBOARD_MODIFIER_STATE ModifierState,
  951. IN PHIDP_INSERT_SCANCODES InsertCodesProcedure,
  952. IN PVOID InsertCodesContext
  953. )
  954. {
  955. SquirtSqflPtszV( sqfl | sqflBenign,
  956. TEXT("DIDummy_HidP_TranslateUsagesToI8042ScanCodes( %08x, %u, %08x, %08x, %08x, %08x )"),
  957. ChangedUsageList, UsageListLength, KeyAction, ModifierState, InsertCodesProcedure, InsertCodesContext );
  958. return HIDP_STATUS_NOT_IMPLEMENTED;
  959. }
  960. ////////////////////////////////////////
  961. // winmm.dll dummy functions
  962. ////////////////////////////////////////
  963. MMRESULT WINAPI DIDummy_joyGetDevCaps
  964. (
  965. IN UINT uJoyID,
  966. OUT LPJOYCAPS pjc,
  967. IN UINT cbjc
  968. )
  969. {
  970. SquirtSqflPtszV( sqfl | sqflBenign,
  971. TEXT("DIDummy_joyGetDevCaps( %u, %08x, %u )"),
  972. uJoyID, pjc, cbjc );
  973. return MMSYSERR_ERROR;
  974. }
  975. MMRESULT WINAPI DIDummy_joyGetPosEx
  976. (
  977. IN UINT uJoyID,
  978. OUT LPJOYINFOEX pji
  979. )
  980. {
  981. SquirtSqflPtszV( sqfl | sqflBenign,
  982. TEXT("DIDummy_joyGetPosEx( %u, %08x )"),
  983. uJoyID, pji );
  984. return MMSYSERR_ERROR;
  985. }
  986. MMRESULT WINAPI DIDummy_joyGetPos
  987. (
  988. IN UINT uJoyID,
  989. OUT LPJOYINFO pji
  990. )
  991. {
  992. SquirtSqflPtszV( sqfl | sqflBenign,
  993. TEXT("DIDummy_joyGetPos( %u, %08x )"),
  994. uJoyID, pji );
  995. return MMSYSERR_ERROR;
  996. }
  997. UINT WINAPI DIDummy_joyConfigChanged
  998. (
  999. IN DWORD dwFlags
  1000. )
  1001. {
  1002. SquirtSqflPtszV( sqfl | sqflBenign,
  1003. TEXT("DIDummy_joyConfigChanged( %u )"),
  1004. dwFlags );
  1005. return MMSYSERR_ERROR;
  1006. }
  1007. MMRESULT WINAPI DIDummy_mmioClose
  1008. (
  1009. IN HMMIO hmmio,
  1010. IN UINT fuClose
  1011. )
  1012. {
  1013. SquirtSqflPtszV( sqfl | sqflBenign,
  1014. TEXT("DIDummy_mmioClose( %08x, %u )"),
  1015. hmmio, fuClose );
  1016. return MMSYSERR_ERROR;
  1017. }
  1018. HMMIO WINAPI DIDummy_mmioOpenA
  1019. (
  1020. IN OUT LPSTR pszFileName,
  1021. IN OUT LPMMIOINFO pmmioinfo,
  1022. IN DWORD fdwOpen
  1023. )
  1024. {
  1025. SquirtSqflPtszV( sqfl | sqflBenign,
  1026. TEXT("DIDummy_mmioOpenA( %s, %08x, %u )"),
  1027. pszFileName, pmmioinfo, fdwOpen );
  1028. return NULL;
  1029. }
  1030. MMRESULT WINAPI DIDummy_mmioDescend
  1031. (
  1032. IN HMMIO hmmio,
  1033. IN OUT LPMMCKINFO pmmcki,
  1034. IN const MMCKINFO FAR* pmmckiParent,
  1035. IN UINT fuDescend
  1036. )
  1037. {
  1038. SquirtSqflPtszV( sqfl | sqflBenign,
  1039. TEXT("DIDummy_mmioDescend( %08x, %08x, %08x, %u )"),
  1040. hmmio, pmmcki, pmmckiParent, fuDescend );
  1041. return MMSYSERR_ERROR;
  1042. }
  1043. MMRESULT WINAPI DIDummy_mmioCreateChunk
  1044. (
  1045. IN HMMIO hmmio,
  1046. IN LPMMCKINFO pmmcki,
  1047. IN UINT fuCreate
  1048. )
  1049. {
  1050. SquirtSqflPtszV( sqfl | sqflBenign,
  1051. TEXT("DIDummy_mmioCreateChunk( %08x, %08x, %u )"),
  1052. hmmio, pmmcki, fuCreate );
  1053. return MMSYSERR_ERROR;
  1054. }
  1055. LONG WINAPI DIDummy_mmioRead
  1056. (
  1057. IN HMMIO hmmio,
  1058. OUT HPSTR pch,
  1059. IN LONG cch
  1060. )
  1061. {
  1062. SquirtSqflPtszV( sqfl | sqflBenign,
  1063. TEXT("DIDummy_mmioRead( %08x, %08x, %u )"),
  1064. hmmio, pch, cch );
  1065. return 0;
  1066. }
  1067. LONG WINAPI DIDummy_mmioWrite
  1068. (
  1069. IN HMMIO hmmio,
  1070. IN const char _huge* pch,
  1071. IN LONG cch
  1072. )
  1073. {
  1074. SquirtSqflPtszV( sqfl | sqflBenign,
  1075. TEXT("DIDummy_mmioWrite( %08x, %08x, %u )"),
  1076. hmmio, pch, cch );
  1077. return 0;
  1078. }
  1079. MMRESULT WINAPI DIDummy_mmioAscend
  1080. (
  1081. IN HMMIO hmmio,
  1082. IN LPMMCKINFO pmmcki,
  1083. IN UINT fuAscend
  1084. )
  1085. {
  1086. SquirtSqflPtszV( sqfl | sqflBenign,
  1087. TEXT("DIDummy_mmioAscend( %08x, %08x, %u )"),
  1088. hmmio, pmmcki, fuAscend );
  1089. return MMSYSERR_ERROR;
  1090. }
  1091. ////////////////////////////////////////
  1092. // user32.dll dummy functions
  1093. ////////////////////////////////////////
  1094. #ifdef USE_WM_INPUT
  1095. BOOL WINAPI DIDummy_RegisterRawInputDevices
  1096. (
  1097. PCRAWINPUTDEVICE pRawInputDevices,
  1098. UINT uiNumDevices,
  1099. UINT cbSize
  1100. )
  1101. {
  1102. SquirtSqflPtszV( sqfl | sqflBenign,
  1103. TEXT("DIDummy_RegisterRawInputDevices( %08x, %u, %u )"),
  1104. pRawInputDevices, uiNumDevices, cbSize );
  1105. return FALSE;
  1106. }
  1107. UINT WINAPI DIDummy_GetRawInputData
  1108. (
  1109. HRAWINPUT hRawInput,
  1110. UINT uiCommand,
  1111. LPVOID pData,
  1112. PUINT pcbSize,
  1113. UINT cbSizeHeader
  1114. )
  1115. {
  1116. SquirtSqflPtszV( sqfl | sqflBenign,
  1117. TEXT("DIDummy_GetRawInputData( %08x, %u, %08x, %08x, %u )"),
  1118. hRawInput, uiCommand, pData, pcbSize, cbSizeHeader );
  1119. return -1;
  1120. }
  1121. #endif //#ifdef USE_WM_INPUT
  1122. #endif /* STATIC_DLLUSAGE */
  1123. #endif //HID_SUPPORT