Skip to content

Commit dd91546

Browse files
committed
Version 1.7
1 parent 932ff8f commit dd91546

5 files changed

Lines changed: 105 additions & 122 deletions

File tree

winmmwrp/Resource.aps

-4 Bytes
Binary file not shown.

winmmwrp/Resource.rc

-2 Bytes
Binary file not shown.

winmmwrp/WinMMWrapper.c

Lines changed: 91 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
#include <Windows.h>
2-
#include <stdio.h>
3-
#include <Winuser.h>
42

53
#define KDMAPI_UDID 0 // KDMAPI default uDeviceID
64
#define KDMAPI_NOTLOADED 0 // KDMAPI is not loaded
@@ -27,64 +25,57 @@
2725
static DWORD DrvMajor = 0, DrvMinor = 0, DrvBuild = 0, DrvRevision = 0;
2826

2927
// OM funcs
28+
static HMODULE OM = NULL;
3029
static BOOL IsCallbackWindow = FALSE; // WMMC
3130
static HMIDIOUT OMDummy = 0x10001; // Dummy pointer, used for KDMAPI Output
32-
static void(WINAPI*SCE)(DWORD eventtype, DWORD chan, DWORD param) = 0; // SendCustomEvent
33-
static MMRESULT(WINAPI*SDD)(DWORD msg) = 0; // SendDirectData
34-
static MMRESULT(WINAPI*SDLD)(MIDIHDR* IIMidiHdr) = 0; // SendDirectLongData
35-
static MMRESULT(WINAPI*mM)(UINT uDeviceID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dwParam1, DWORD_PTR dwParam2) = 0; // modMessage
36-
static BOOL(WINAPI*RKDMAPIV)(DWORD *Major, DWORD *Minor, DWORD *Build, DWORD *Revision) = 0; // ReturnKDMAPIVer
37-
static BOOL(WINAPI*IOMS)(void) = 0; // InitializeKDMAPIStream
38-
static BOOL(WINAPI*TOMS)(void) = 0; // TerminateKDMAPIStream
39-
static void(WINAPI*ROMS)(void) = 0; // ResetKDMAPIStream
40-
static BOOL(WINAPI*IKDMAPIA)(void) = 0; // IsKDMAPIAvailable
31+
static VOID(WINAPI*SCE)(DWORD, DWORD, DWORD) = 0; // SendCustomEvent
32+
static MMRESULT(WINAPI*SDD)(DWORD) = 0; // SendDirectData
33+
static MMRESULT(WINAPI*SDLD)(LPMIDIHDR) = 0; // SendDirectLongData
34+
static MMRESULT(WINAPI*mM)(UINT, UINT, DWORD_PTR, DWORD_PTR, DWORD_PTR) = 0; // modMessage
35+
static BOOL(WINAPI*RKDMAPIV)(LPDWORD, LPDWORD, LPDWORD, LPDWORD) = 0; // ReturnKDMAPIVer
36+
static BOOL(WINAPI*IOMS)(VOID) = 0; // InitializeKDMAPIStream
37+
static BOOL(WINAPI*TOMS)(VOID) = 0; // TerminateKDMAPIStream
38+
static VOID(WINAPI*ROMS)(VOID) = 0; // ResetKDMAPIStream
39+
static BOOL(WINAPI*IKDMAPIA)(VOID) = 0; // IsKDMAPIAvailable
4140

4241
// NTDLL funcs
43-
static NTSTATUS(NTAPI*NtLockVirtualMemory)(IN HANDLE process, IN OUT void** baseAddress, IN OUT ULONG* size, IN ULONG flags);
44-
static NTSTATUS(NTAPI*NtUnlockVirtualMemory)(IN HANDLE process, IN OUT void** baseAddress, IN OUT ULONG* size, IN ULONG flags);
45-
static NTSTATUS(NTAPI*NtDelayExecution)(BOOLEAN dwAlertable, PLARGE_INTEGER dwDelayInterval);
42+
static NTSTATUS(NTAPI*NtLockVirtualMemory)(IN HANDLE, IN OUT void**, IN OUT ULONG*, IN ULONG);
43+
static NTSTATUS(NTAPI*NtUnlockVirtualMemory)(IN HANDLE, IN OUT void**, IN OUT ULONG*, IN ULONG);
44+
static NTSTATUS(NTAPI*NtDelayExecution)(BOOLEAN, PLARGE_INTEGER);
4645

47-
#ifdef _DAWRELEASE
4846
// WinMM funcs, just replace MM with "midiOut" to get the real version
49-
static UINT(WINAPI*MMOutGetNumDevs)(void) = 0;
50-
static MMRESULT(WINAPI*MMOutGetDevCapsW)(UINT_PTR uDeviceID, LPMIDIOUTCAPSW lpCaps, UINT uSize) = 0;
51-
static MMRESULT(WINAPI*MMOutOpen)(LPHMIDIOUT lphMidiOut, UINT uDeviceID, DWORD_PTR dwCallback, DWORD_PTR dwCallbackInstance, DWORD dwFlags) = 0;
52-
static MMRESULT(WINAPI*MMOutClose)(HMIDIOUT hMidiOut) = 0;
53-
static MMRESULT(WINAPI*MMOutReset)(HMIDIOUT hMidiOut) = 0;
54-
static MMRESULT(WINAPI*MMOutShortMsg)(HMIDIOUT hMidiOut, DWORD dwMsg) = 0;
55-
static MMRESULT(WINAPI*MMOutPrepareHeader)(HMIDIOUT hMidiOut, MIDIHDR* lpMidiOutHdr, UINT uSize) = 0;
56-
static MMRESULT(WINAPI*MMOutUnprepareHeader)(HMIDIOUT hMidiOut, MIDIHDR* lpMidiOutHdr, UINT uSize) = 0;
57-
static MMRESULT(WINAPI*MMOutLongMsg)(HMIDIOUT hMidiOut, MIDIHDR* lpMidiOutHdr, UINT uSize) = 0;
58-
static MMRESULT(WINAPI*MMOutCachePatches)(HMIDIOUT hMidiOut, UINT wPatch, WORD *lpPatchArray, UINT wFlags) = 0;
59-
static MMRESULT(WINAPI*MMOutCacheDrumPatches)(HMIDIOUT hMidiOut, UINT wPatch, WORD *lpKeyArray, UINT wFlags) = 0;
60-
static MMRESULT(WINAPI*MMOutMessage)(HMIDIOUT hMidiOut, UINT uMsg, DWORD_PTR dw1, DWORD_PTR dw2) = 0;
61-
static MMRESULT(WINAPI*MMOutSetVolume)(HMIDIOUT hMidiOut, DWORD dwVolume) = 0;
62-
static MMRESULT(WINAPI*MMOutGetVolume)(HMIDIOUT hMidiOut, LPDWORD lpdwVolume) = 0;
63-
static MMRESULT(WINAPI*MMOutGetID)(HMIDIOUT hMidiOut, LPUINT puDeviceID) = 0;
47+
static HMODULE OWINMM = NULL;
48+
#ifdef _DAWRELEASE
49+
50+
static UINT(WINAPI*MMOutGetNumDevs)(VOID) = 0;
51+
static MMRESULT(WINAPI*MMOutGetDevCapsW)(UINT_PTR, LPMIDIOUTCAPSW, UINT) = 0;
52+
static MMRESULT(WINAPI*MMOutOpen)(LPHMIDIOUT, UINT, DWORD_PTR, DWORD_PTR, DWORD) = 0;
53+
static MMRESULT(WINAPI*MMOutClose)(HMIDIOUT) = 0;
54+
static MMRESULT(WINAPI*MMOutReset)(HMIDIOUT) = 0;
55+
static MMRESULT(WINAPI*MMOutShortMsg)(HMIDIOUT, DWORD) = 0;
56+
static MMRESULT(WINAPI*MMOutPrepareHeader)(HMIDIOUT, LPMIDIHDR, UINT) = 0;
57+
static MMRESULT(WINAPI*MMOutUnprepareHeader)(HMIDIOUT, LPMIDIHDR, UINT) = 0;
58+
static MMRESULT(WINAPI*MMOutLongMsg)(HMIDIOUT, LPMIDIHDR, UINT) = 0;
59+
static MMRESULT(WINAPI*MMOutCachePatches)(HMIDIOUT, UINT, LPWORD, UINT) = 0;
60+
static MMRESULT(WINAPI*MMOutCacheDrumPatches)(HMIDIOUT, UINT, LPWORD, UINT) = 0;
61+
static MMRESULT(WINAPI*MMOutMessage)(HMIDIOUT, UINT, DWORD_PTR, DWORD_PTR) = 0;
62+
static MMRESULT(WINAPI*MMOutSetVolume)(HMIDIOUT, DWORD) = 0;
63+
static MMRESULT(WINAPI*MMOutGetVolume)(HMIDIOUT, LPDWORD) = 0;
64+
static MMRESULT(WINAPI*MMOutGetID)(HMIDIOUT, LPUINT) = 0;
6465
#endif
66+
static MMRESULT(WINAPI*MMtimeGetDevCaps)(LPTIMECAPS, UINT) = 0;
67+
static MMRESULT(WINAPI*MMtimeSetEvent)(UINT, UINT, LPTIMECALLBACK, DWORD_PTR, UINT) = 0;
68+
static MMRESULT(WINAPI*MMtimeKillEvent)(UINT) = 0;
69+
static DWORD(WINAPI*MMtimeGetTime)(VOID) = 0;
70+
static MMRESULT(WINAPI*MMtimeGetSystemTime)(LPMMTIME, UINT) = 0;
71+
static MMRESULT(WINAPI*MMtimeBeginPeriod)(UINT) = 0;
72+
static MMRESULT(WINAPI*MMtimeEndPeriod)(UINT) = 0;
6573

6674
// Callback, used for old apps that require one
6775
static DWORD_PTR WMMCI;
68-
static void(CALLBACK*WMMC)(HMIDIOUT hmo, DWORD wMsg, DWORD_PTR dwInstance, DWORD_PTR dwParam1, DWORD_PTR dwParam2) = 0;
69-
70-
static int ST = 4;
71-
static int SNT[7] =
72-
{
73-
MOD_FMSYNTH,
74-
MOD_SYNTH,
75-
MOD_WAVETABLE,
76-
MOD_MAPPER,
77-
MOD_MIDIPORT,
78-
MOD_SWSYNTH,
79-
MOD_SQSYNTH
80-
};
81-
82-
static HMODULE OM = NULL;
83-
static HMODULE OWINMM = NULL;
76+
static VOID(CALLBACK*WMMC)(HMIDIOUT, DWORD, DWORD_PTR, DWORD_PTR, DWORD_PTR) = 0;
8477

8578
void CheckIfKDMAPIIsUpToDate() {
86-
TCHAR ErrorBuf[1024];
87-
8879
BOOL GoAhead = FALSE;
8980
RKDMAPIV(&DrvMajor, &DrvMinor, &DrvBuild, &DrvRevision);
9081

@@ -106,6 +97,8 @@ void CheckIfKDMAPIIsUpToDate() {
10697
}
10798

10899
if (!GoAhead) {
100+
TCHAR ErrorBuf[1024];
101+
109102
sprintf_s(
110103
ErrorBuf,
111104
1024,
@@ -182,7 +175,7 @@ void InitializeNTDLL() {
182175
}
183176
}
184177

185-
#ifdef _DAWRELEASE
178+
186179
void InitializeWinMM() {
187180
// Load WinMM
188181
wchar_t SystemDirectory[MAX_PATH];
@@ -193,13 +186,14 @@ void InitializeWinMM() {
193186
if (!OWINMM) {
194187
MessageBox(
195188
NULL,
196-
"Failed to initialize the Windows Multimedia API!\nAre you trying to use the patch on Windows 98 or something like that?\n\nPress OK to exit.",
189+
"Failed to initialize the Windows Multimedia API!\nThe interpreter won't work if Windows Multimedia isn't present.\n(P.S. WINE isn't supported.)\n\nPress OK to exit.",
197190
"OMDirect API",
198191
MB_ICONERROR | MB_OK | MB_SYSTEMMODAL
199192
);
200193
exit(0x0A);
201194
}
202195

196+
#ifdef _DAWRELEASE
203197
MMOutGetNumDevs = (UINT*)GetProcAddress(OWINMM, "midiOutGetNumDevs");
204198
MMOutGetDevCapsW = (MMRESULT*)GetProcAddress(OWINMM, "midiOutGetDevCapsW");
205199
MMOutOpen = (MMRESULT*)GetProcAddress(OWINMM, "midiOutOpen");
@@ -215,15 +209,21 @@ void InitializeWinMM() {
215209
MMOutSetVolume = (MMRESULT*)GetProcAddress(OWINMM, "midiOutSetVolume");
216210
MMOutGetVolume = (MMRESULT*)GetProcAddress(OWINMM, "midiOutGetVolume");
217211
MMOutGetID = (MMRESULT*)GetProcAddress(OWINMM, "midiOutGetID");
218-
}
219212
#endif
213+
MMtimeGetDevCaps = (MMRESULT*)GetProcAddress(OWINMM, "timeGetDevCaps");
214+
MMtimeSetEvent = (MMRESULT*)GetProcAddress(OWINMM, "timeSetEvent");
215+
MMtimeKillEvent = (MMRESULT*)GetProcAddress(OWINMM, "timeKillEvent");
216+
MMtimeGetTime = (DWORD*)GetProcAddress(OWINMM, "timeGetTime");
217+
MMtimeGetSystemTime = (MMRESULT*)GetProcAddress(OWINMM, "timeGetSystemTime");
218+
MMtimeBeginPeriod = (MMRESULT*)GetProcAddress(OWINMM, "timeBeginPeriod");
219+
MMtimeEndPeriod = (MMRESULT*)GetProcAddress(OWINMM, "timeEndPeriod");
220+
}
221+
220222

221223
BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID fImpLoad) {
222224
if (fdwReason == DLL_PROCESS_ATTACH) {
223225
InitializeNTDLL();
224-
#ifdef _DAWRELEASE
225226
InitializeWinMM();
226-
#endif
227227
InitializeOMDirectAPI();
228228
}
229229
return TRUE;
@@ -240,19 +240,6 @@ UINT WINAPI KDMAPI_midiOutGetNumDevs(void) {
240240

241241
MMRESULT WINAPI KDMAPI_midiOutGetDevCapsW(UINT_PTR uDeviceID, LPMIDIOUTCAPSW lpCaps, UINT uSize) {
242242
MIDIOUTCAPSW myCapsW;
243-
DWORD CapsSupport = MIDICAPS_VOLUME;
244-
245-
wchar_t SynthName[MAXPNAMELEN];
246-
WORD VID = 0xFFFF;
247-
WORD PID = 0x000A;
248-
DWORD DM = MOD_SWSYNTH;
249-
250-
// Read key
251-
HKEY hKey;
252-
long lResult;
253-
DWORD dwType;
254-
DWORD dwSize = sizeof(DWORD);
255-
DWORD dwSizeW = sizeof(SynthName);
256243

257244
// Return the output device, but Unicode (UTF-8)
258245
if (lpCaps == NULL) return MMSYSERR_INVALPARAM;
@@ -263,20 +250,13 @@ MMRESULT WINAPI KDMAPI_midiOutGetDevCapsW(UINT_PTR uDeviceID, LPMIDIOUTCAPSW lpC
263250
return MMOutGetDevCapsW(uDeviceID, lpCaps, uSize);
264251

265252
case KDMAPI_UDID:
266-
ZeroMemory(SynthName, MAXPNAMELEN);
267-
wcscat(SynthName, L"KDMAPI Output to OmniMIDI\0");
268-
DM = MOD_WAVETABLE;
269-
270-
// ChecOM done, assign device type
271-
DM = SNT[ST];
272-
273253
// Assign values
274-
myCapsW.wMid = VID;
275-
myCapsW.wPid = PID;
276-
wcsncpy(myCapsW.szPname, SynthName, 32);
254+
myCapsW.wMid = 0xFFFF;
255+
myCapsW.wPid = 0x000A;
256+
wcsncpy(myCapsW.szPname, L"KDMAPI Output to OmniMIDI", MAXPNAMELEN);
277257
myCapsW.wVoices = 0xFFFF;
278258
myCapsW.wNotes = 0x0000;
279-
myCapsW.wTechnology = DM;
259+
myCapsW.wTechnology = MOD_MIDIPORT;
280260
myCapsW.wChannelMask = 0xFFFF;
281261
myCapsW.dwSupport = MIDICAPS_VOLUME;
282262

@@ -291,38 +271,13 @@ MMRESULT WINAPI KDMAPI_midiOutGetDevCapsW(UINT_PTR uDeviceID, LPMIDIOUTCAPSW lpC
291271
#else
292272
if (uDeviceID > 0) return MMSYSERR_BADDEVICEID;
293273

294-
LSTATUS RegKey = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\OmniMIDI\\Configuration", 0, KEY_ALL_ACCESS, &hKey);
295-
if (RegKey == ERROR_SUCCESS) {
296-
dwType = REG_DWORD;
297-
RegQueryValueEx(hKey, "SynthType", NULL, &dwType, (LPBYTE)&ST, &dwSize);
298-
RegQueryValueEx(hKey, "VID", NULL, &dwType, (LPBYTE)&VID, &dwSize);
299-
RegQueryValueEx(hKey, "PID", NULL, &dwType, (LPBYTE)&PID, &dwSize);
300-
301-
dwType = REG_SZ;
302-
lResult = RegQueryValueExW(hKey, L"SynthName", NULL, &dwType, (LPBYTE)&SynthName, &dwSizeW);
303-
RegCloseKey(hKey);
304-
// Done reading, close key
305-
}
306-
307-
// Some checks
308-
if (ST < 0 || ST > 6) ST = 4;
309-
else ST = MOD_SWSYNTH;
310-
311-
if (wcslen(SynthName) < 1 || iswspace(SynthName[0]) || lResult != ERROR_SUCCESS) {
312-
ZeroMemory(SynthName, MAXPNAMELEN);
313-
wcscat(SynthName, L"KDMAPI Output\0");
314-
}
315-
316-
// Checks done, assign device type
317-
DM = SNT[ST];
318-
319274
// Assign values
320-
myCapsW.wMid = VID;
321-
myCapsW.wPid = PID;
322-
wcsncpy(myCapsW.szPname, SynthName, 32);
275+
myCapsW.wMid = 0xFFFF;
276+
myCapsW.wPid = 0x000A;
277+
wcsncpy(myCapsW.szPname, L"KDMAPI Output to OmniMIDI", MAXPNAMELEN);
323278
myCapsW.wVoices = 0xFFFF;
324279
myCapsW.wNotes = 0x0000;
325-
myCapsW.wTechnology = DM;
280+
myCapsW.wTechnology = MOD_MIDIPORT;
326281
myCapsW.wChannelMask = 0xFFFF;
327282
myCapsW.dwSupport = MIDICAPS_VOLUME;
328283

@@ -400,7 +355,7 @@ MMRESULT WINAPI KDMAPI_midiOutOpen(LPHMIDIOUT lphmo, UINT_PTR uDeviceID, DWORD_P
400355
// Setup the Callback (If there's one) - NEEDED FOR VANBASCO!
401356
// If dwflags is CALLBACK_EVENT, then skip, since it's not needed. (Java pls)
402357
if ((dwFlags != CALLBACK_NULL) && (dwFlags != CALLBACK_EVENT)) {
403-
WMMC = (void*)dwCallback;
358+
WMMC = (VOID*)dwCallback;
404359
WMMCI = dwCallbackInstance;
405360

406361
IsCallbackWindow = (dwFlags == CALLBACK_WINDOW);
@@ -583,7 +538,35 @@ MMRESULT WINAPI KDMAPI_midiOutGetID(HMIDIOUT hMidiOut, LPUINT puDeviceID) {
583538
return MMSYSERR_NOERROR;
584539
}
585540

586-
UINT WINAPI KDMAPI_mmsystemGetVersion() {
541+
MMRESULT WINAPI KDMAPI_timeGetDevCaps(LPTIMECAPS ptc, UINT cbtc) {
542+
return MMtimeGetDevCaps(ptc, cbtc);
543+
}
544+
545+
MMRESULT WINAPI KDMAPI_timeSetEvent(UINT uDelay, UINT uResolution, LPTIMECALLBACK lpTimeProc, DWORD_PTR dwUser, UINT fuEvent) {
546+
return MMtimeSetEvent(uDelay, uResolution, lpTimeProc, dwUser, fuEvent);
547+
}
548+
549+
MMRESULT WINAPI KDMAPI_timeKillEvent(UINT uTimerID) {
550+
return MMtimeKillEvent(uTimerID);
551+
}
552+
553+
DWORD WINAPI KDMAPI_timeGetTime() {
554+
return MMtimeGetTime();
555+
}
556+
557+
MMRESULT WINAPI KDMAPI_timeGetSystemTime(LPMMTIME pmmt, UINT cbmmt) {
558+
return MMtimeGetSystemTime(pmmt, cbmmt);
559+
}
560+
561+
MMRESULT WINAPI KDMAPI_timeBeginPeriod(UINT uPeriod) {
562+
return MMtimeBeginPeriod(uPeriod);
563+
}
564+
565+
MMRESULT WINAPI KDMAPI_timeEndPeriod(UINT uPeriod) {
566+
return MMtimeEndPeriod(uPeriod);
567+
}
568+
569+
UINT WINAPI KDMAPI_mmsystemGetVersion(void) {
587570
// Dummy, not needed
588571
return 0x0502U;
589572
}

winmmwrp/WinMMWrapper32.def

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -143,13 +143,13 @@ EXPORTS
143143
sndPlaySoundA = c:\\windows\\system32\\winmm.sndPlaySoundA
144144
sndPlaySoundW = c:\\windows\\system32\\winmm.sndPlaySoundW
145145
tid32Message = c:\\windows\\system32\\winmm.tid32Message
146-
timeBeginPeriod = c:\\windows\\system32\\winmm.timeBeginPeriod
147-
timeEndPeriod = c:\\windows\\system32\\winmm.timeEndPeriod
148-
timeGetDevCaps = c:\\windows\\system32\\winmm.timeGetDevCaps
149-
timeGetSystemTime = c:\\windows\\system32\\winmm.timeGetSystemTime
150-
timeGetTime = c:\\windows\\system32\\winmm.timeGetTime
151-
timeKillEvent = c:\\windows\\system32\\winmm.timeKillEvent
152-
timeSetEvent = c:\\windows\\system32\\winmm.timeSetEvent
146+
timeBeginPeriod = KDMAPI_timeBeginPeriod
147+
timeEndPeriod = KDMAPI_timeEndPeriod
148+
timeGetDevCaps = KDMAPI_timeGetDevCaps
149+
timeGetSystemTime = KDMAPI_timeGetSystemTime
150+
timeGetTime = KDMAPI_timeGetTime
151+
timeKillEvent = KDMAPI_timeKillEvent
152+
timeSetEvent = KDMAPI_timeSetEvent
153153
waveInAddBuffer = c:\\windows\\system32\\winmm.waveInAddBuffer
154154
waveInClose = c:\\windows\\system32\\winmm.waveInClose
155155
waveInGetDevCapsA = c:\\windows\\system32\\winmm.waveInGetDevCapsA

winmmwrp/WinMMWrapper64.def

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -135,13 +135,13 @@ EXPORTS
135135
mmsystemGetVersion = KDMAPI_mmsystemGetVersion
136136
sndPlaySoundA = c:\\windows\\system32\\winmm.sndPlaySoundA
137137
sndPlaySoundW = c:\\windows\\system32\\winmm.sndPlaySoundW
138-
timeBeginPeriod = c:\\windows\\system32\\winmm.timeBeginPeriod
139-
timeEndPeriod = c:\\windows\\system32\\winmm.timeEndPeriod
140-
timeGetDevCaps = c:\\windows\\system32\\winmm.timeGetDevCaps
141-
timeGetSystemTime = c:\\windows\\system32\\winmm.timeGetSystemTime
142-
timeGetTime = c:\\windows\\system32\\winmm.timeGetTime
143-
timeKillEvent = c:\\windows\\system32\\winmm.timeKillEvent
144-
timeSetEvent = c:\\windows\\system32\\winmm.timeSetEvent
138+
timeBeginPeriod = KDMAPI_timeBeginPeriod
139+
timeEndPeriod = KDMAPI_timeEndPeriod
140+
timeGetDevCaps = KDMAPI_timeGetDevCaps
141+
timeGetSystemTime = KDMAPI_timeGetSystemTime
142+
timeGetTime = KDMAPI_timeGetTime
143+
timeKillEvent = KDMAPI_timeKillEvent
144+
timeSetEvent = KDMAPI_timeSetEvent
145145
waveInAddBuffer = c:\\windows\\system32\\winmm.waveInAddBuffer
146146
waveInClose = c:\\windows\\system32\\winmm.waveInClose
147147
waveInGetDevCapsA = c:\\windows\\system32\\winmm.waveInGetDevCapsA

0 commit comments

Comments
 (0)