Source code of Windows XP (NT5)
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.

546 lines
17 KiB

  1. /*==========================================================================
  2. *
  3. * mmsysp.h -- Internal include file for Multimedia API's
  4. *
  5. * Version 4.00
  6. *
  7. * Copyright (C) 1992-1998 Microsoft Corporation. All Rights Reserved.
  8. *
  9. *--------------------------------------------------------------------------
  10. *
  11. * Define: Prevent inclusion of:
  12. * -------------- --------------------------------------------------------
  13. * MMNODRV Installable driver support
  14. * MMNOSOUND Sound support
  15. * MMNOWAVE Waveform support
  16. * MMNOMIDI MIDI support
  17. * MMNOAUX Auxiliary audio support
  18. * MMNOMIXER Mixer support
  19. * MMNOTIMER Timer support
  20. * MMNOJOY Joystick support
  21. * MMNOMCI MCI support
  22. * MMNOMMIO Multimedia file I/O support
  23. * MMNOMMSYSTEM General MMSYSTEM functions
  24. *
  25. *==========================================================================
  26. */
  27. #ifndef _INC_MMSYSP
  28. #define _INC_MMSYSP
  29. #ifdef _WIN32
  30. #include <pshpack1.h>
  31. #else
  32. #ifndef RC_INVOKED
  33. #pragma pack(1)
  34. #endif
  35. #endif
  36. #ifdef __cplusplus
  37. extern "C" { /* Assume C declarations for C++ */
  38. #endif /* __cplusplus */
  39. #ifdef _WIN32
  40. #ifndef _WINMM_
  41. #define WINMMAPI DECLSPEC_IMPORT
  42. #else
  43. #define WINMMAPI
  44. #endif
  45. #define _loadds
  46. #define _huge
  47. #endif
  48. #ifdef BUILDDLL
  49. #undef WINAPI
  50. #define WINAPI _loadds FAR PASCAL
  51. #undef CALLBACK
  52. #define CALLBACK _loadds FAR PASCAL
  53. #endif /* ifdef BUILDDLL */
  54. /* Multimedia messages */
  55. #define WM_MM_RESERVED_FIRST 0x03A0
  56. #define WM_MM_RESERVED_LAST 0x03DF
  57. /* 0x3BA is open */
  58. #define MM_MCISYSTEM_STRING 0x3CA
  59. #if(WINVER < 0x0400)
  60. #define MM_MOM_POSITIONCB 0x3CA /* Callback for MEVT_POSITIONCB */
  61. #ifndef MM_MCISIGNAL
  62. #define MM_MCISIGNAL 0x3CB
  63. #endif
  64. #define MM_MIM_MOREDATA 0x3CC /* MIM_DONE w/ pending events */
  65. /* 0x3CF is open */
  66. #endif /* WINVER < 0x0400 */
  67. /* 3D8 - 3DF are reserved for Haiku */
  68. #ifdef _WIN32
  69. #define WINMMDEVICECHANGEMSGSTRINGA "winmm_devicechange"
  70. #define WINMMDEVICECHANGEMSGSTRINGW L"winmm_devicechange"
  71. #ifdef UNICODE
  72. #define WINMMDEVICECHANGEMSGSTRING WINMMDEVICECHANGEMSGSTRINGW
  73. #else
  74. #define WINMMDEVICECHANGEMSGSTRING WINMMDEVICECHANGEMSGSTRINGA
  75. #endif
  76. #else
  77. #define WINMMDEVICECHANGEMSGSTRING "winmm_devicechange"
  78. #endif
  79. #ifndef MMNODRV
  80. #endif /* ifndef MMNODRV */
  81. #define CALLBACK_THUNK 0x00040000l /* dwCallback is a Ring0 Thread Handle */
  82. #define CALLBACK_EVENT16 0x00060000l /* dwCallback is an EVENT under Win16*/
  83. #ifdef BUILDDLL
  84. typedef void (FAR PASCAL DRVCALLBACK)(HDRVR hdrvr, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2);
  85. #else /* ifdef BUILDDLL */
  86. #endif /* ifdef BUILDDLL */
  87. #ifndef MMNOMMSYSTEM
  88. WINMMAPI UINT WINAPI mmsystemGetVersion(void);
  89. void FAR CDECL _loadds OutputDebugStrF(LPCSTR pszFormat, ...);
  90. void WINAPI winmmUntileBuffer(DWORD dwTilingInfo);
  91. DWORD WINAPI winmmTileBuffer(DWORD dwFlatMemory, DWORD dwLength);
  92. BOOL WINAPI mmShowMMCPLPropertySheet(HWND hWnd, LPSTR szPropSheetID, LPSTR szTabName, LPSTR szCaption);
  93. #endif /* ifndef MMNOMMSYSTEM */
  94. #ifndef MMNOSOUND
  95. #if(WINVER < 0x0400)
  96. #define SND_PURGE 0x0040 /* purge non-static events for task */
  97. #define SND_APPLICATION 0x0080 /* look for application specific association */
  98. #endif /* WINVER < 0x0400 */
  99. #define SND_LOPRIORITY 0x10000000L /* low priority sound */
  100. #define SND_EVENTTIME 0x20000000L /* dangerous event time */
  101. #define SND_VALIDFLAGS 0x001720DF // Set of valid flag bits. Anything outside
  102. // this range will raise an error
  103. #define SND_SNDPLAYSOUNDF_VALID 0x20FF
  104. #define SND_PLAYSOUNDF_VALID 0x301720DFL
  105. #endif /* ifndef MMNOSOUND */
  106. #ifndef MMNOWAVE
  107. #if(WINVER < 0x0400)
  108. #define WAVE_MAPPED 0x0004
  109. #define WAVE_FORMAT_DIRECT 0x0008
  110. #define WAVE_FORMAT_DIRECT_QUERY (WAVE_FORMAT_QUERY | WAVE_FORMAT_DIRECT)
  111. #endif /* WINVER < 0x0400 */
  112. #ifndef _WIN32
  113. #define WAVE_SHARED 0x8000
  114. #endif
  115. #define WAVE_VALID 0x800F
  116. #define WHDR_MAPPED 0x00001000 /* thunked header */
  117. #define WHDR_VALID 0x0000101F /* valid flags */
  118. #endif /* ifndef MMNOWAVE */
  119. #ifndef MMNOMIDI
  120. #if(WINVER < 0x0400)
  121. #define MIM_MOREDATA MM_MIM_MOREDATA
  122. #define MOM_POSITIONCB MM_MOM_POSITIONCB
  123. #endif /* WINVER < 0x0400 */
  124. #if(WINVER < 0x0400)
  125. /* flags for dwFlags parm of midiInOpen() */
  126. #define MIDI_IO_STATUS 0x00000020L
  127. #endif /* WINVER < 0x0400 */
  128. #define MIDI_IO_CONTROL 0x00000008L
  129. #define MIDI_IO_INPUT 0x00000010L /*future*/
  130. #define MIDI_IO_OWNED 0x00004000L
  131. #define MIDI_IO_SHARED 0x00008000L
  132. #define MIDI_I_VALID 0xC027
  133. #define MIDI_O_VALID 0xC00E
  134. #define MIDI_CACHE_VALID (MIDI_CACHE_ALL | MIDI_CACHE_BESTFIT | MIDI_CACHE_QUERY | MIDI_UNCACHE)
  135. #if(WINVER < 0x0400)
  136. #define MIDICAPS_STREAM 0x0008 /* driver supports midiStreamOut directly */
  137. #endif /* WINVER < 0x0400 */
  138. /* 3.1 style MIDIHDR for parameter validation */
  139. typedef struct midihdr31_tag {
  140. LPSTR lpData; /* pointer to locked data block */
  141. DWORD dwBufferLength; /* length of data in data block */
  142. DWORD dwBytesRecorded; /* used for input only */
  143. DWORD_PTR dwUser; /* for client's use */
  144. DWORD dwFlags; /* assorted flags (see defines) */
  145. struct midihdr_tag far *lpNext; /* reserved for driver */
  146. DWORD_PTR reserved; /* reserved for driver */
  147. } MIDIHDR31, *PMIDIHDR31, NEAR *NPMIDIHDR31, FAR *LPMIDIHDR31;
  148. #if(WINVER < 0x0400)
  149. typedef struct midievent_tag
  150. {
  151. DWORD dwDeltaTime; /* Ticks since last event */
  152. DWORD dwStreamID; /* Reserved; must be zero */
  153. DWORD dwEvent; /* Event type and parameters */
  154. DWORD dwParms[1]; /* Parameters if this is a long event */
  155. } MIDIEVENT;
  156. typedef struct midistrmbuffver_tag
  157. {
  158. DWORD dwVersion; /* Stream buffer format version */
  159. DWORD dwMid; /* Manufacturer ID as defined in MMREG.H */
  160. DWORD dwOEMVersion; /* Manufacturer version for custom ext */
  161. } MIDISTRMBUFFVER;
  162. #endif /* WINVER < 0x0400 */
  163. #define MHDR_SENDING 0x00000020
  164. #define MHDR_MAPPED 0x00001000 /* thunked header */
  165. #define MHDR_SHADOWHDR 0x00002000 /* MIDIHDR is 16-bit shadow */
  166. #define MHDR_VALID 0x0000302F /* valid flags */
  167. /*#define MHDR_VALID 0xFFFF000F /* valid flags */
  168. #define MHDR_SAVE 0x00003000 /* Save these flags */
  169. /* past driver calls */
  170. #if(WINVER < 0x0400)
  171. /* */
  172. /* Type codes which go in the high byte of the event DWORD of a stream buffer */
  173. /* */
  174. /* Type codes 00-7F contain parameters within the low 24 bits */
  175. /* Type codes 80-FF contain a length of their parameter in the low 24 */
  176. /* bits, followed by their parameter data in the buffer. The event */
  177. /* DWORD contains the exact byte length; the parm data itself must be */
  178. /* padded to be an even multiple of 4 bytes long. */
  179. /* */
  180. #define MEVT_F_SHORT 0x00000000L
  181. #define MEVT_F_LONG 0x80000000L
  182. #define MEVT_F_CALLBACK 0x40000000L
  183. #define MEVT_EVENTTYPE(x) ((BYTE)(((x)>>24)&0xFF))
  184. #define MEVT_EVENTPARM(x) ((DWORD)((x)&0x00FFFFFFL))
  185. #define MEVT_SHORTMSG ((BYTE)0x00) /* parm = shortmsg for midiOutShortMsg */
  186. #define MEVT_TEMPO ((BYTE)0x01) /* parm = new tempo in microsec/qn */
  187. #define MEVT_NOP ((BYTE)0x02) /* parm = unused; does nothing */
  188. /* 0x04-0x7F reserved */
  189. #define MEVT_LONGMSG ((BYTE)0x80) /* parm = bytes to send verbatim */
  190. #define MEVT_COMMENT ((BYTE)0x82) /* parm = comment data */
  191. #define MEVT_VERSION ((BYTE)0x84) /* parm = MIDISTRMBUFFVER struct */
  192. /* 0x81-0xFF reserved */
  193. #define MIDISTRM_ERROR (-2)
  194. /* */
  195. /* Structures and defines for midiStreamProperty */
  196. /* */
  197. #define MIDIPROP_SET 0x80000000L
  198. #define MIDIPROP_GET 0x40000000L
  199. /* These are intentionally both non-zero so the app cannot accidentally */
  200. /* leave the operation off and happen to appear to work due to default */
  201. /* action. */
  202. #define MIDIPROP_TIMEDIV 0x00000001L
  203. #define MIDIPROP_TEMPO 0x00000002L
  204. typedef struct midiproptimediv_tag
  205. {
  206. DWORD cbStruct;
  207. DWORD dwTimeDiv;
  208. } MIDIPROPTIMEDIV, FAR *LPMIDIPROPTIMEDIV;
  209. typedef struct midiproptempo_tag
  210. {
  211. DWORD cbStruct;
  212. DWORD dwTempo;
  213. } MIDIPROPTEMPO, FAR *LPMIDIPROPTEMPO;
  214. #endif /* WINVER < 0x0400 */
  215. #define MIDIPROP_PROPVAL 0x3FFFFFFFL
  216. #if(WINVER < 0x0400)
  217. WINMMAPI MMRESULT WINAPI midiStreamOpen( OUT LPHMIDISTRM phms, IN LPUINT puDeviceID, IN DWORD cMidi, IN DWORD_PTR dwCallback, IN DWORD_PTR dwInstance, IN DWORD fdwOpen);
  218. WINMMAPI MMRESULT WINAPI midiStreamClose( IN HMIDISTRM hms);
  219. WINMMAPI MMRESULT WINAPI midiStreamProperty( IN HMIDISTRM hms, OUT LPBYTE lppropdata, IN DWORD dwProperty);
  220. WINMMAPI MMRESULT WINAPI midiStreamPosition( IN HMIDISTRM hms, OUT LPMMTIME lpmmt, IN UINT cbmmt);
  221. WINMMAPI MMRESULT WINAPI midiStreamOut( IN HMIDISTRM hms, IN LPMIDIHDR pmh, IN UINT cbmh);
  222. WINMMAPI MMRESULT WINAPI midiStreamPause( IN HMIDISTRM hms);
  223. WINMMAPI MMRESULT WINAPI midiStreamRestart( IN HMIDISTRM hms);
  224. WINMMAPI MMRESULT WINAPI midiStreamStop( IN HMIDISTRM hms);
  225. #ifdef _WIN32
  226. WINMMAPI MMRESULT WINAPI midiConnect( IN HMIDI hmi, IN HMIDIOUT hmo, IN LPVOID pReserved);
  227. WINMMAPI MMRESULT WINAPI midiDisconnect( IN HMIDI hmi, IN HMIDIOUT hmo, IN LPVOID pReserved);
  228. #endif
  229. #endif /* WINVER < 0x0400 */
  230. #endif /* ifndef MMNOMIDI */
  231. #ifndef MMNOAUX
  232. #endif /* ifndef MMNOAUX */
  233. #ifndef MMNOMIXER
  234. #define MIXER_OBJECTF_TYPEMASK 0xF0000000L
  235. #define MIXERCAPS_SUPPORTF_xxx 0x00000000L
  236. #define MIXER_OPENF_VALID (MIXER_OBJECTF_TYPEMASK | CALLBACK_TYPEMASK)
  237. #define MIXER_GETLINEINFOF_VALID (MIXER_OBJECTF_TYPEMASK | MIXER_GETLINEINFOF_QUERYMASK)
  238. #define MIXER_GETIDF_VALID (MIXER_OBJECTF_TYPEMASK)
  239. #define MIXERCONTROL_CONTROLF_VALID 0x80000003L
  240. #define MIXER_GETLINECONTROLSF_VALID (MIXER_OBJECTF_TYPEMASK | MIXER_GETLINECONTROLSF_QUERYMASK)
  241. #define MIXER_GETCONTROLDETAILSF_VALID (MIXER_OBJECTF_TYPEMASK | MIXER_GETCONTROLDETAILSF_QUERYMASK)
  242. #define MIXER_SETCONTROLDETAILSF_VALID (MIXER_OBJECTF_TYPEMASK | MIXER_SETCONTROLDETAILSF_QUERYMASK)
  243. #endif /* ifndef MMNOMIXER */
  244. #ifndef MMNOTIMER
  245. #ifdef BUILDDLL
  246. typedef void (FAR PASCAL TIMECALLBACK)(UINT uTimerID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2);
  247. #else /* ifdef BUILDDLL */
  248. #endif /* ifdef BUILDDLL */
  249. #define TIME_CALLBACK_TYPEMASK 0x00F0
  250. #endif /* ifndef MMNOTIMER */
  251. #ifndef MMNOJOY
  252. #if(WINVER < 0x0400)
  253. typedef struct joyinfoex_tag {
  254. DWORD dwSize; /* size of structure */
  255. DWORD dwFlags; /* flags to indicate what to return */
  256. DWORD dwXpos; /* x position */
  257. DWORD dwYpos; /* y position */
  258. DWORD dwZpos; /* z position */
  259. DWORD dwRpos; /* rudder/4th axis position */
  260. DWORD dwUpos; /* 5th axis position */
  261. DWORD dwVpos; /* 6th axis position */
  262. DWORD dwButtons; /* button states */
  263. DWORD dwButtonNumber; /* current button number pressed */
  264. DWORD dwPOV; /* point of view state */
  265. DWORD dwReserved1; /* reserved for communication between winmm & driver */
  266. DWORD dwReserved2; /* reserved for future expansion */
  267. } JOYINFOEX, *PJOYINFOEX, NEAR *NPJOYINFOEX, FAR *LPJOYINFOEX;
  268. #endif /* WINVER < 0x0400 */
  269. #if(WINVER < 0x0400)
  270. WINMMAPI MMRESULT WINAPI joyGetPosEx( IN UINT uJoyID, OUT LPJOYINFOEX pji);
  271. #endif /* WINVER < 0x0400 */
  272. UINT WINAPI joySetCalibration(UINT uJoyID, LPUINT puXbase,
  273. LPUINT puXdelta, LPUINT puYbase, LPUINT puYdelta,
  274. LPUINT puZbase, LPUINT puZdelta);
  275. #if (WINVER >= 0x0400)
  276. WINMMAPI MMRESULT WINAPI joyConfigChanged( IN DWORD dwFlags );
  277. #endif
  278. #endif /* ifndef MMNOJOY */
  279. #ifndef MMNOMMIO
  280. #define MMIO_OPEN_VALID 0x0003FFFF /* valid flags for mmioOpen */
  281. #define MMIO_FLUSH_VALID MMIO_EMPTYBUF /* valid flags for mmioFlush */
  282. #define MMIO_ADVANCE_VALID (MMIO_WRITE | MMIO_READ) /* valid flags for mmioAdvance */
  283. #define MMIO_FOURCC_VALID MMIO_TOUPPER /* valid flags for mmioStringToFOURCC */
  284. #define MMIO_DESCEND_VALID (MMIO_FINDCHUNK | MMIO_FINDRIFF | MMIO_FINDLIST)
  285. #define MMIO_CREATE_VALID (MMIO_CREATERIFF | MMIO_CREATELIST)
  286. #define MMIO_WIN31_TASK 0x80000000
  287. #define MMIO_VALIDPROC 0x10070000 /* valid for mmioInstallIOProc */
  288. #endif /* ifndef MMNOMMIO */
  289. #ifndef MMNOMCI
  290. #define MCI_SOUND 0x0812
  291. #define MCI_WIN32CLIENT 0x0857
  292. /* flags for dwFlags parameter of MCI_SOUND command message */
  293. #define MCI_SOUND_NAME 0x00000100L
  294. /* parameter block for MCI_SOUND command message */
  295. #ifdef _WIN32
  296. typedef struct tagMCI_SOUND_PARMSA {
  297. DWORD_PTR dwCallback;
  298. LPCSTR lpstrSoundName;
  299. } MCI_SOUND_PARMSA, *PMCI_SOUND_PARMSA, *LPMCI_SOUND_PARMSA;
  300. typedef struct tagMCI_SOUND_PARMSW {
  301. DWORD_PTR dwCallback;
  302. LPCWSTR lpstrSoundName;
  303. } MCI_SOUND_PARMSW, *PMCI_SOUND_PARMSW, *LPMCI_SOUND_PARMSW;
  304. #ifdef UNICODE
  305. typedef MCI_SOUND_PARMSW MCI_SOUND_PARMS;
  306. typedef PMCI_SOUND_PARMSW PMCI_SOUND_PARMS;
  307. typedef LPMCI_SOUND_PARMSW LPMCI_SOUND_PARMS;
  308. #else
  309. typedef MCI_SOUND_PARMSA MCI_SOUND_PARMS;
  310. typedef PMCI_SOUND_PARMSA PMCI_SOUND_PARMS;
  311. typedef LPMCI_SOUND_PARMSA LPMCI_SOUND_PARMS;
  312. #endif // UNICODE
  313. #else
  314. typedef struct tagMCI_SOUND_PARMS {
  315. DWORD dwCallback;
  316. LPCSTR lpstrSoundName;
  317. } MCI_SOUND_PARMS;
  318. typedef MCI_SOUND_PARMS FAR * LPMCI_SOUND_PARMS;
  319. #endif
  320. #endif /* ifndef MMNOMCI */
  321. /****************************************************************************
  322. audiosrv MME PNP definitions
  323. ****************************************************************************/
  324. #define MMDEVICEINFO_REMOVED 0x00000001
  325. #define PAD_POINTER(p) (PVOID)((((DWORD_PTR)(p))+7)&(~0x7))
  326. typedef struct _MMDEVICEINTERFACEINFO {
  327. LONG cPnpEvents;
  328. DWORD fdwInfo;
  329. DWORD SetupPreferredAudioCount;
  330. WCHAR szName[1];
  331. } MMDEVICEINTERFACEINFO, *PMMDEVICEINTERFACEINFO;
  332. // Note: This structure MMNPNPINFO is used with a global file mapping, and
  333. // it is also used by DirectSound.
  334. //
  335. // Don't modify unless absolutely necessary!!!
  336. typedef struct _MMPNPINFO {
  337. DWORD cbSize;
  338. LONG cPnpEvents;
  339. LONG cPreferredDeviceChanges;
  340. LONG cDevInterfaces;
  341. HWND hwndNotify;
  342. /* MMDEVINTERFACEINFO DevInfo[0]; */
  343. } MMPNPINFO, *PMMPNPINFO;
  344. #ifdef _WIN32
  345. #define MMGLOBALPNPINFONAMEA "Global\\mmGlobalPnpInfo"
  346. #define MMGLOBALPNPINFONAMEW L"Global\\mmGlobalPnpInfo"
  347. #ifdef UNICODE
  348. #define MMGLOBALPNPINFONAME MMGLOBALPNPINFONAMEW
  349. #else
  350. #define MMGLOBALPNPINFONAME MMGLOBALPNPINFONAMEA
  351. #endif
  352. #else
  353. #define MMGLOBALPNPINFONAME "Global\\mmGlobalPnpInfo"
  354. #endif
  355. /****************************************************************************
  356. GFX support
  357. A series of functions to support the GFX features of the control panel
  358. ****************************************************************************/
  359. #define GFXTYPE_INVALID 0
  360. #define GFXTYPE_RENDER 1
  361. #define GFXTYPE_CAPTURE 2
  362. #define GFXTYPE_RENDERCAPTURE 3
  363. #define GFX_MAXORDER (0x1000 - 1)
  364. typedef struct _DEVICEINTERFACELIST
  365. {
  366. LONG Count;
  367. PWSTR DeviceInterface[1];
  368. } DEVICEINTERFACELIST, *PDEVICEINTERFACELIST;
  369. WINMMAPI
  370. LONG
  371. WINAPI
  372. gfxCreateZoneFactoriesList
  373. (
  374. OUT PDEVICEINTERFACELIST *ppDeviceInterfaceList
  375. );
  376. WINMMAPI
  377. LONG
  378. WINAPI
  379. gfxCreateGfxFactoriesList
  380. (
  381. IN PCWSTR ZoneFactoryDi,
  382. OUT PDEVICEINTERFACELIST *ppDeviceInterfaceList
  383. );
  384. WINMMAPI
  385. LONG
  386. WINAPI
  387. gfxDestroyDeviceInterfaceList
  388. (
  389. IN PDEVICEINTERFACELIST pDiList
  390. );
  391. typedef LONG (CALLBACK* GFXENUMCALLBACK)(PVOID Context, DWORD Id, PCWSTR GfxFactoryDi, REFCLSID rclsid, ULONG Type, ULONG Order);
  392. WINMMAPI
  393. LONG
  394. WINAPI
  395. gfxEnumerateGfxs
  396. (
  397. IN PCWSTR pstrZoneDeviceInterface,
  398. IN GFXENUMCALLBACK pGfxEnumCallback,
  399. IN PVOID Context
  400. );
  401. WINMMAPI
  402. LONG
  403. WINAPI
  404. gfxRemoveGfx
  405. (
  406. IN DWORD Id
  407. );
  408. WINMMAPI
  409. LONG
  410. WINAPI
  411. gfxAddGfx
  412. (
  413. IN PCWSTR ZoneFactoryDi,
  414. IN PCWSTR GfxFactoryDi,
  415. IN ULONG Type,
  416. IN ULONG Order,
  417. OUT PDWORD pNewId
  418. );
  419. WINMMAPI
  420. LONG
  421. WINAPI
  422. gfxModifyGfx
  423. (
  424. IN DWORD Id,
  425. IN ULONG Order
  426. );
  427. WINMMAPI
  428. LONG
  429. WINAPI
  430. gfxOpenGfx
  431. (
  432. IN DWORD dwGfxId,
  433. OUT HANDLE *pFileHandle
  434. );
  435. typedef struct _GFXREMOVEREQUEST {
  436. DWORD IdToRemove;
  437. LONG Error;
  438. } GFXREMOVEREQUEST, *PGFXREMOVEREQUEST;
  439. typedef struct _GFXMODIFYREQUEST {
  440. DWORD IdToModify;
  441. ULONG NewOrder;
  442. LONG Error;
  443. } GFXMODIFYREQUEST, *PGFXMODIFYREQUEST;
  444. typedef struct _GFXADDREQUEST {
  445. PWSTR ZoneFactoryDi;
  446. PWSTR GfxFactoryDi;
  447. ULONG Type;
  448. ULONG Order;
  449. DWORD NewId;
  450. LONG Error;
  451. } GFXADDREQUEST, *PGFXADDREQUEST;
  452. WINMMAPI
  453. LONG
  454. WINAPI
  455. gfxBatchChange
  456. (
  457. PGFXREMOVEREQUEST paGfxRemoveRequests,
  458. ULONG cGfxRemoveRequests,
  459. PGFXMODIFYREQUEST paGfxModifyRequests,
  460. ULONG cGfxModifyRequests,
  461. PGFXADDREQUEST paGfxAddRequests,
  462. ULONG cGfxAddRequests
  463. );
  464. #ifdef __cplusplus
  465. } /* End of extern "C" { */
  466. #endif /* __cplusplus */
  467. #ifdef _WIN32
  468. #include <poppack.h>
  469. #else
  470. #ifndef RC_INVOKED
  471. #pragma pack()
  472. #endif
  473. #endif
  474. #endif /* _INC_MMSYSP */