⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wdmaud.h

📁 winNT技术操作系统,国外开放的原代码和LIUX一样
💻 H
📖 第 1 页 / 共 2 页
字号:
        DPRINT("-- %s --\n", #info); \
        DUMP_MEMBER(info, unknown_00); \
        DUMP_MEMBER(info, id); \
        DUMP_MEMBER(info, type); \
        DUMP_MEMBER(info, wave_handle); \
        DUMP_MEMBER(info, client_instance); \
        DUMP_MEMBER(info, client_callback); \
        DUMP_MEMBER(info, unknown_18); \
        DUMP_MEMBER(info, flags); \
        DUMP_MEMBER(info, ioctl_param2); \
        DUMP_MEMBER(info, ioctl_param1); \
        DUMP_MEMBER(info, with_critical_section); \
        DUMP_MEMBER(info, string_2c); \
        DUMP_MEMBER(info, unknown_30); \
        DUMP_MEMBER(info, playing_notes); \
        DUMP_MEMBER(info, unknown_38); \
        DUMP_MEMBER(info, unknown_3c); \
        DUMP_MEMBER(info, unknown_40); \
        DUMP_MEMBER(info, unknown_44); \
        DUMP_MEMBER(info, unknown_48); \
        DUMP_MEMBER(info, unknown_4C); \
        DUMP_MEMBER(info, unknown_50); \
        DUMP_MEMBER(info, beef); \
        DUMP_MEMBER(info, state); \
        DUMP_MEMBER(info, signature); \
    }

#else

#define DUMP_MEMBER(struct, member)
#define DUMP_WDMAUD_DEVICE_INFO(info)

#endif


/* Helper (helper.c) funcs */

MMRESULT TranslateWinError(DWORD error);
#define GetLastMmError()        TranslateWinError(GetLastError());


/* user.c */

void
NotifyClient(
    PWDMAUD_DEVICE_INFO device,
    DWORD message,
    DWORD p1,
    DWORD p2
);


/* kernel.c */

BOOL
EnableKernelInterface();

BOOL
DisableKernelInterface();

HANDLE
GetKernelInterface();

MMRESULT
CallKernelDevice(
    PWDMAUD_DEVICE_INFO device,
    DWORD ioctl_code,
    DWORD param1,
    DWORD param2);

/* devices.c */

BOOL
IsValidDevicePath(WCHAR* path);

MMRESULT
ValidateDeviceData(
    PWDMAUD_DEVICE_INFO device_data,
    BOOL require_state
);
/*
MMRESULT ValidateDeviceState(PWDMAUD_DEVICE_STATE state);
MMRESULT ValidateDeviceStateEvents(PWDMAUD_DEVICE_STATE state);
MMRESULT ValidateDeviceInfoAndState(PWDMAUD_DEVICE_INFO device_info);
*/

/* TODO: Add ID parameter */

PWDMAUD_DEVICE_INFO
CreateDeviceData(
    CHAR device_type,
    DWORD device_id,
    WCHAR* device_path,
    BOOL with_state
);

void
DeleteDeviceData(PWDMAUD_DEVICE_INFO device_data);

/* mixer ... */

MMRESULT ModifyDevicePresence(
    CHAR device_type,
    WCHAR* device_path,
    BOOL adding);

#define AddDevice(device_type, device_path) \
	ModifyDevicePresence(device_type, device_path, TRUE)

#define AddWaveInDevice(device_path) \
        AddDevice(WDMAUD_WAVE_IN, device_path)
#define AddWaveOutDevice(device_path) \
        AddDevice(WDMAUD_WAVE_OUT, device_path)
#define AddMidiInDevice(device_path) \
        AddDevice(WDMAUD_MIDI_IN,  device_path)
#define AddMidiOutDevice(device_path) \
        AddDevice(WDMAUD_MIDI_OUT, device_path)
#define AddMixerDevice(device_path) \
        AddDevice(WDMAUD_MIXER, device_path)
#define AddAuxDevice(device_path) \
        AddDevice(WDMAUD_AUX, device_path)

#define RemoveDevice(device_type, device_path) \
        ModifyDevicePresence(device_type, device_path, FALSE)

#define RemoveWaveInDevice(device_path) \
        RemoveDevice(WDMAUD_WAVE_IN, device_path)
#define RemoveWaveOutDevice(device_path) \
        RemoveDevice(WDMAUD_WAVE_OUT, device_path)
#define RemoveMidiInDevice(device_path) \
        RemoveDevice(WDMAUD_MIDI_IN, device_path)
#define RemoveMidiOutDevice(device_path) \
        RemoveDevice(WDMAUD_MIDI_OUT, device_path)
#define RemoveMixerDevice(device_path) \
        RemoveDevice(WDMAUD_MIXER, device_path)
#define RemoveAuxDevice(device_path) \
        RemoveDevice(WDMAUD_AUX, device_path)


DWORD
GetDeviceCount(CHAR device_type, WCHAR* device_path);

#define GetWaveInCount(device_path)  GetDeviceCount(WDMAUD_WAVE_IN,  device_path)
#define GetWaveOutCount(device_path) GetDeviceCount(WDMAUD_WAVE_OUT, device_path)
#define GetMidiInCount(device_path)  GetDeviceCount(WDMAUD_MIDI_IN,  device_path)
#define GetMidiOutCount(device_path) GetDeviceCount(WDMAUD_MIDI_OUT, device_path)
#define GetMixerCount(device_path)   GetDeviceCount(WDMAUD_MIXER,    device_path)
#define GetAuxCount(device_path)     GetDeviceCount(WDMAUD_AUX,      device_path)

MMRESULT
GetDeviceCapabilities(
    CHAR device_type,
    DWORD device_id,
    WCHAR* device_path,
    LPMDEVICECAPSEX caps
);

#define GetWaveInCapabilities(id, device_path, caps) \
        GetDeviceCapabilities(WDMAUD_WAVE_IN, id, device_path, caps);
#define GetWaveOutCapabilities(id, device_path, caps) \
        GetDeviceCapabilities(WDMAUD_WAVE_OUT, id, device_path, caps);
#define GetMidiInCapabilities(id, device_path, caps) \
        GetDeviceCapabilities(WDMAUD_MIDI_IN, id, device_path, caps);
#define GetMidiOutCapabilities(id, device_path, caps) \
        GetDeviceCapabilities(WDMAUD_MIDI_OUT, id, device_path, caps);
#define GetMixerCapabilities(id, device_path, caps) \
        GetDeviceCapabilities(WDMAUD_MIXER, id, device_path, caps);
#define GetAuxCapabilities(id, device_path, caps) \
        GetDeviceCapabilities(WDMAUD_AUX, id, device_path, caps);

MMRESULT
OpenDeviceViaKernel(
    PWDMAUD_DEVICE_INFO device,
    LPWAVEFORMATEX format
);

MMRESULT
OpenDevice(
    CHAR device_type,
    DWORD device_id,
    LPVOID open_descriptor,
    DWORD flags,
    PWDMAUD_DEVICE_INFO* user_data
);


/* wave.c */
#if 0
MMRESULT
OpenWaveDevice(
    CHAR device_type,
    DWORD device_id,
    LPWAVEOPENDESC open_details,
    DWORD flags,
    DWORD user_data
);
#endif

#define OpenWaveInDevice(id, open_details, flags, user_data) \
        OpenDevice(WDMAUD_WAVE_IN, id, open_details, flags, user_data);
#define OpenWaveOutDevice(id, open_details, flags, user_data) \
        OpenDevice(WDMAUD_WAVE_OUT, id, open_details, flags, user_data);
#define OpenMidiInDevice(id, open_details, flags, user_data) \
        OpenDevice(WDMAUD_MIDI_IN, id, open_details, flags, user_data);
#define OpenMidiOutDevice(id, open_details, flags, user_data) \
        OpenDevice(WDMAUD_MIDI_OUT, id, open_details, flags, user_data);


MMRESULT
CloseWaveDevice(
    PWDMAUD_DEVICE_INFO device
);

#define SET_WAVEHDR_FLAG(header, flag) \
    header->dwFlags |= flag

#define CLEAR_WAVEHDR_FLAG(header, flag) \
    header->dwFlags &= ~flag

#define IS_WAVEHDR_FLAG_SET(header, flag) \
    ( header->dwFlags & flag )

MMRESULT
ValidateWavePreparationData(PWDMAUD_WAVE_PREPARATION_DATA prep_data);

MMRESULT
ValidateWaveHeader(PWAVEHDR header);

MMRESULT
PrepareWaveHeader(
    PWDMAUD_DEVICE_INFO device,
    PWAVEHDR header
);

MMRESULT
UnprepareWaveHeader(PWAVEHDR header);

#define IsHeaderPrepared(header) \
    ( header->reserved != 0 )

MMRESULT
CompleteWaveHeader(PWAVEHDR header);

MMRESULT
WriteWaveData(PWDMAUD_DEVICE_INFO device, PWAVEHDR header);


/* midi.c */

#if 0
MMRESULT
OpenMidiDevice(
    CHAR device_type,
    DWORD device_id,
    LPMIDIOPENDESC open_details,
    DWORD flags,
    DWORD user_data
);
#endif

MMRESULT
CloseMidiDevice(
    PWDMAUD_DEVICE_INFO device
);

MMRESULT
WriteMidiShort(
    PWDMAUD_DEVICE_INFO device,
    DWORD message
);

/* FIXME: Bad params */
MMRESULT
WriteMidiBuffer(PWDMAUD_DEVICE_INFO device);

MMRESULT
ResetMidiDevice(PWDMAUD_DEVICE_INFO device);




/* threads.c */

BOOL CreateCompletionThread(PWDMAUD_DEVICE_INFO device);


/* MORE... */

/*
    DEBUGGING + RESOURCE TRACKING
*/

LPVOID AllocMem(DWORD size);
VOID FreeMem(LPVOID pointer);
VOID ReportMem();

#define AutoAlloc(type) \
    (type*) MemAlloc(sizeof(type));

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -