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.
 
 
 
 
 
 

368 lines
8.8 KiB

//==========================================================================;
//
// mixmgri.h
//
// Copyright (C) 1992-1993 Microsoft Corporation. All Rights Reserved.
//
// Description:
// This header file contains INTERNAL Mixer Manager defines and stuff.
//
// History:
// 6/27/93 cjp [curtisp]
//
//==========================================================================;
#ifndef _INC_MIXMGRI
#define _INC_MIXMGRI // #defined if file has been included
#ifndef RC_INVOKED
#pragma pack(1) // assume byte packing throughout
#endif
#ifndef EXTERN_C
#ifdef __cplusplus
#define EXTERN_C extern "C"
#else
#define EXTERN_C extern
#endif
#endif
#ifdef __cplusplus
extern "C" // assume C declarations for C++
{
#endif
#ifdef DEBUG
#define RDEBUG
#endif
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
//
//
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
//
//
//
#ifndef FIELD_OFFSET
#define FIELD_OFFSET(type, field) ((LONG)&(((type *)0)->field))
#endif
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
//
//
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// WARNING DANGER WARNING DANGER WARNING DANGER WARNING DANGER WARNING
//
// if you change the order of the following defines, you must also fix
// gapszMxMgrFunctions[] in idrvinit.c!
//
// WARNING DANGER WARNING DANGER WARNING DANGER WARNING DANGER WARNING
//
enum {
MXMGRTHUNK_GETNUMDEVS = 0,
#ifdef WIN32
MXMGRTHUNK_GETDEVCAPSA ,
MXMGRTHUNK_GETDEVCAPS ,
#else
MXMGRTHUNK_GETDEVCAPS ,
#endif // WIN32
MXMGRTHUNK_GETID ,
MXMGRTHUNK_OPEN ,
MXMGRTHUNK_CLOSE ,
MXMGRTHUNK_MESSAGE ,
#ifdef WIN32
MXMGRTHUNK_GETLINEINFOA ,
MXMGRTHUNK_GETLINEINFO ,
MXMGRTHUNK_GETLINECONTROLSA ,
MXMGRTHUNK_GETLINECONTROLS ,
MXMGRTHUNK_GETCONTROLDETAILSA ,
MXMGRTHUNK_GETCONTROLDETAILS ,
#else
MXMGRTHUNK_GETLINEINFO ,
MXMGRTHUNK_GETLINECONTROLS ,
MXMGRTHUNK_GETCONTROLDETAILS ,
#endif // WIN32
MXMGRTHUNK_SETCONTROLDETAILS ,
MXMGRTHUNK_MAX_FUNCTIONS
};
extern FARPROC gafnMxMgrFunctions[];
//
//
//
//
UINT FNGLOBAL IMixerGetNumDevs
(
void
);
MMRESULT FNGLOBAL IMixerGetDevCaps
(
UINT uMxId,
LPMIXERCAPS pmxcaps,
UINT cbmxcaps
);
#ifdef WIN32
MMRESULT FNGLOBAL IMixerGetDevCapsA
(
UINT uMxId,
LPMIXERCAPSA pmxcaps,
UINT cbmxcaps
);
#endif // WIN32
MMRESULT FNGLOBAL IMixerGetID
(
HMIXEROBJ hmxobj,
UINT FAR *puMxId,
LPMIXERLINE pmxl,
DWORD fdwId
);
MMRESULT FNGLOBAL IMixerOpen
(
LPHMIXER phmx,
UINT uMxId,
DWORD dwCallback,
DWORD dwInstance,
DWORD fdwOpen
);
MMRESULT FNGLOBAL IMixerClose
(
HMIXER hmx
);
DWORD FNGLOBAL IMixerMessage
(
HMIXER hmx,
UINT uMsg,
DWORD dwParam1,
DWORD dwParam2
);
MMRESULT FNGLOBAL IMixerGetLineInfo
(
HMIXEROBJ hmxobj,
LPMIXERLINE pmxl,
DWORD fdwInfo
);
MMRESULT FNGLOBAL IMixerGetLineControls
(
HMIXEROBJ hmxobj,
LPMIXERLINECONTROLS pmxlc,
DWORD fdwControls
);
MMRESULT FNGLOBAL IMixerGetControlDetails
(
HMIXEROBJ hmxobj,
LPMIXERCONTROLDETAILS pmxcd,
DWORD fdwDetails
);
#ifdef WIN32
MMRESULT FNGLOBAL IMixerGetLineInfoA
(
HMIXEROBJ hmxobj,
LPMIXERLINEA pmxl,
DWORD fdwInfo
);
MMRESULT FNGLOBAL IMixerGetLineControlsA
(
HMIXEROBJ hmxobj,
LPMIXERLINECONTROLSA pmxlc,
DWORD fdwControls
);
MMRESULT FNGLOBAL IMixerGetControlDetailsA
(
HMIXEROBJ hmxobj,
LPMIXERCONTROLDETAILS pmxcd,
DWORD fdwDetails
);
#endif // WIN32
MMRESULT FNGLOBAL IMixerSetControlDetails
(
HMIXEROBJ hmxobj,
LPMIXERCONTROLDETAILS pmxcd,
DWORD fdwDetails
);
//
//
//
//
//
BOOL FNGLOBAL IMixerUnloadDrivers
(
HDRVR hdrvr
);
BOOL FNGLOBAL IMixerLoadDrivers
(
HDRVR hdrvr
);
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// -= Handles =-
//
//
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// No multi-thread synchronization for 16-bit
//
#define ENTER_MM_HANDLE(x) TRUE
#define LEAVE_MM_HANDLE(x)
#define MIXMGR_ENTER
#define MIXMGR_LEAVE
//
// typedef for mxdMessage
//
typedef DWORD (CALLBACK *DRIVERMSGPROC)
(
UINT uId,
UINT uMsg,
DWORD dwInstance,
DWORD dwParam1,
DWORD dwParam2
);
EXTERN_C DWORD FNWCALLBACK mxdMessageHack
(
UINT uDevId,
UINT uMsg,
DWORD dwUser,
DWORD dwParam1,
DWORD dwParam2
);
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// -= Parameter Validation =-
//
//
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// No error logging for Win32
//
#ifdef WIN32
#define LogParamError(a, b, c)
#endif // WIN32
//
//
//
BOOL FNGLOBAL ValidateReadPointer(const void FAR* p, DWORD len);
BOOL FNGLOBAL ValidateWritePointer(const void FAR* p, DWORD len);
BOOL FNGLOBAL ValidateDriverCallback(DWORD dwCallback, UINT uFlags);
BOOL FNGLOBAL ValidateCallback(FARPROC lpfnCallback);
BOOL FNGLOBAL ValidateString(LPCSTR lsz, UINT cbMaxLen);
//
// unless we decide differently, ALWAYS do parameter validation--even
// in retail. this is the 'safest' thing we can do. note that we still
// LOG parameter errors in retail (see prmvalXX).
//
#if 1
#define V_HANDLE(h, t, r) { if (!ValidateHandle(h, t)) return (r); }
#define V_RPOINTER(p, l, r) { if (!ValidateReadPointer((p), (l))) return (r); }
#define V_WPOINTER(p, l, r) { if (!ValidateWritePointer((p), (l))) return (r); }
#define V_DCALLBACK(d, w, r) { if (!ValidateDriverCallback((d), (w))) return (r); }
#define V_CALLBACK(f, r) { if (!ValidateCallback(f)) return (r); }
#define V_STRING(s, l, r) { if (!ValidateString(s,l)) return (r); }
#define V_DFLAGS(t, b, f, r) { if ((t) & ~(b)) {LogParamError(ERR_BAD_DFLAGS, (FARPROC)(f), (LPVOID)(DWORD)(t)); return (r); }}
#define V_FLAGS(t, b, f, r) { if ((t) & ~(b)) {LogParamError(ERR_BAD_FLAGS, (FARPROC)(f), (LPVOID)(DWORD)(t)); return (r); }}
#else
#define V_HANDLE(h, t, r) { if (!(h)) return (r); }
#define V_RPOINTER(p, l, r) { if (!(p)) return (r); }
#define V_WPOINTER(p, l, r) { if (!(p)) return (r); }
#define V_DCALLBACK(d, w, r) 0
#define V_CALLBACK(f, r) { if (!(f)) return (r); }
#define V_STRING(s, l, r) { if (!(s)) return (r); }
#define V_DFLAGS(t, b, f, r) { if ((t) & ~(b)) return (r); }
#define V_FLAGS(t, b, f, r) { if ((t) & ~(b)) return (r); }
#endif
//
// the DV_xxxx macros are for INTERNAL DEBUG builds--aid to debugging.
// we do 'loose' parameter validation in retail and retail debug builds.
//
#ifdef DEBUG
#define DV_HANDLE(h, t, r) V_HANDLE(h, t, r)
#define DV_RPOINTER(p, l, r) V_RPOINTER(p, l, r)
#define DV_WPOINTER(p, l, r) V_WPOINTER(p, l, r)
#define DV_DCALLBACK(d, w, r) V_DCALLBACK(d, w, r)
#define DV_CALLBACK(f, r) V_CALLBACK(f, r)
#define DV_STRING(s, l, r) V_STRING(s, l, r)
#define DV_DFLAGS(t, b, f, r) V_DFLAGS(t, b, f, r)
#define DV_FLAGS(t, b, f, r) V_FLAGS(t, b, f, r)
#else
#define DV_HANDLE(h, t, r) { if (!(h)) return (r); }
#define DV_RPOINTER(p, l, r) { if (!(p)) return (r); }
#define DV_WPOINTER(p, l, r) { if (!(p)) return (r); }
#define DV_DCALLBACK(d, w, r) 0
#define DV_CALLBACK(f, r) { if (!(f)) return (r); }
#define DV_STRING(s, l, r) { if (!(s)) return (r); }
#define DV_DFLAGS(t, b, f, r) { if ((t) & ~(b)) return (r); }
#define DV_FLAGS(t, b, f, r) { if ((t) & ~(b)) return (r); }
#endif
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
//
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
#ifndef RC_INVOKED
#pragma pack() // revert to default packing
#endif
#ifdef __cplusplus
} // end of extern "C" {
#endif
#endif // _INC_MIXMGRI