Replaced Wine specific DRIVER_GetType by a correct implementation of
GetDriverFlag.
This commit is contained in:
parent
7be462dd31
commit
4f81c3ea30
|
@ -2249,7 +2249,7 @@ static BOOL MMDRV_Install(LPCSTR name, int num, BOOL bIsMapper)
|
||||||
{ lpDrv->parts[_w].u.fnMessage##_y = func; count++; \
|
{ lpDrv->parts[_w].u.fnMessage##_y = func; count++; \
|
||||||
TRACE("Got %d bit func '%s'\n", _y, #_x); }
|
TRACE("Got %d bit func '%s'\n", _y, #_x); }
|
||||||
|
|
||||||
if ((DRIVER_GetType(lpDrv->hDrvr) & WINE_DI_TYPE_MASK) == WINE_DI_TYPE_32) {
|
if ((GetDriverFlags(lpDrv->hDrvr) & (WINE_GDF_EXIST|WINE_GDF_16BIT)) == WINE_GDF_EXIST) {
|
||||||
WINEMM_msgFunc32 func;
|
WINEMM_msgFunc32 func;
|
||||||
|
|
||||||
lpDrv->bIs32 = TRUE;
|
lpDrv->bIs32 = TRUE;
|
||||||
|
|
|
@ -1920,8 +1920,8 @@ DWORD MCI_SendCommandFrom32(UINT wDevID, UINT16 wMsg, DWORD dwParam1, DWORD dwPa
|
||||||
if (!wmd) {
|
if (!wmd) {
|
||||||
dwRet = MCIERR_INVALID_DEVICE_ID;
|
dwRet = MCIERR_INVALID_DEVICE_ID;
|
||||||
} else {
|
} else {
|
||||||
switch (DRIVER_GetType(wmd->hDrv)) {
|
switch (GetDriverFlags(wmd->hDrv) & (WINE_GDF_EXIST|WINE_GDF_16BIT)) {
|
||||||
case WINE_DI_TYPE_16:
|
case WINE_GDF_EXIST|WINE_GDF_16BIT:
|
||||||
{
|
{
|
||||||
MCI_MapType res;
|
MCI_MapType res;
|
||||||
|
|
||||||
|
@ -1946,11 +1946,11 @@ DWORD MCI_SendCommandFrom32(UINT wDevID, UINT16 wMsg, DWORD dwParam1, DWORD dwPa
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WINE_DI_TYPE_32:
|
case WINE_GDF_EXIST:
|
||||||
dwRet = SendDriverMessage(wmd->hDrv, wMsg, dwParam1, dwParam2);
|
dwRet = SendDriverMessage(wmd->hDrv, wMsg, dwParam1, dwParam2);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
WARN("Unknown driver type=%u\n", DRIVER_GetType(wmd->hDrv));
|
WARN("Unknown driver %u\n", wmd->hDrv);
|
||||||
dwRet = MCIERR_DRIVER_INTERNAL;
|
dwRet = MCIERR_DRIVER_INTERNAL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1970,11 +1970,11 @@ DWORD MCI_SendCommandFrom16(UINT wDevID, UINT16 wMsg, DWORD dwParam1, DWORD dwPa
|
||||||
} else {
|
} else {
|
||||||
MCI_MapType res;
|
MCI_MapType res;
|
||||||
|
|
||||||
switch (DRIVER_GetType(wmd->hDrv)) {
|
switch (GetDriverFlags(wmd->hDrv) & (WINE_GDF_EXIST|WINE_GDF_16BIT)) {
|
||||||
case WINE_DI_TYPE_16:
|
case WINE_GDF_EXIST|WINE_GDF_16BIT:
|
||||||
dwRet = SendDriverMessage16(wmd->hDrv, wMsg, dwParam1, dwParam2);
|
dwRet = SendDriverMessage16(wmd->hDrv, wMsg, dwParam1, dwParam2);
|
||||||
break;
|
break;
|
||||||
case WINE_DI_TYPE_32:
|
case WINE_GDF_EXIST:
|
||||||
switch (res = MCI_MapMsg16To32A(wmd->wType, wMsg, &dwParam2)) {
|
switch (res = MCI_MapMsg16To32A(wmd->wType, wMsg, &dwParam2)) {
|
||||||
case MCI_MAP_MSGERROR:
|
case MCI_MAP_MSGERROR:
|
||||||
TRACE("Not handled yet (%s)\n", MCI_MessageToString(wMsg));
|
TRACE("Not handled yet (%s)\n", MCI_MessageToString(wMsg));
|
||||||
|
@ -1996,7 +1996,7 @@ DWORD MCI_SendCommandFrom16(UINT wDevID, UINT16 wMsg, DWORD dwParam1, DWORD dwPa
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
WARN("Unknown driver type=%u\n", DRIVER_GetType(wmd->hDrv));
|
WARN("Unknown driver %u\n", wmd->hDrv);
|
||||||
dwRet = MCIERR_DRIVER_INTERNAL;
|
dwRet = MCIERR_DRIVER_INTERNAL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,48 +88,13 @@ HMODULE WINAPI GetDriverModuleHandle(HDRVR hDriver);
|
||||||
HDRVR16 WINAPI GetNextDriver16(HDRVR16, DWORD);
|
HDRVR16 WINAPI GetNextDriver16(HDRVR16, DWORD);
|
||||||
BOOL16 WINAPI GetDriverInfo16(HDRVR16, DRIVERINFOSTRUCT16 *);
|
BOOL16 WINAPI GetDriverInfo16(HDRVR16, DRIVERINFOSTRUCT16 *);
|
||||||
|
|
||||||
|
DWORD WINAPI GetDriverFlags( HDRVR hDriver );
|
||||||
#ifdef __WINE__
|
#ifdef __WINE__
|
||||||
/* The following definitions are WINE internals */
|
/* this call (GetDriverFlags) is not documented, nor the flags returned.
|
||||||
/* FIXME: This is a WINE internal struct and should be moved in include/wine directory
|
* here are Wine only definitions
|
||||||
* Please note that WINE shares 16 and 32 bit drivers on a single list...
|
|
||||||
* Basically, we maintain an external double view on drivers, so that a 16 bit drivers
|
|
||||||
* can be loaded/used... by 32 functions transparently
|
|
||||||
*/
|
*/
|
||||||
|
#define WINE_GDF_EXIST 0x80000000
|
||||||
/* Who said goofy boy ? */
|
#define WINE_GDF_16BIT 0x10000000
|
||||||
#define WINE_DI_MAGIC 0x900F1B01
|
#endif
|
||||||
|
|
||||||
typedef struct tagWINE_DRIVER
|
|
||||||
{
|
|
||||||
DWORD dwMagic;
|
|
||||||
char szAliasName[128];
|
|
||||||
/* as usual LPWINE_DRIVER == hDriver32 */
|
|
||||||
HDRVR16 hDriver16;
|
|
||||||
union {
|
|
||||||
struct {
|
|
||||||
HMODULE16 hModule;
|
|
||||||
DRIVERPROC16 lpDrvProc;
|
|
||||||
} d16;
|
|
||||||
struct {
|
|
||||||
HMODULE hModule;
|
|
||||||
DRIVERPROC lpDrvProc;
|
|
||||||
} d32;
|
|
||||||
} d;
|
|
||||||
DWORD dwDriverID;
|
|
||||||
DWORD dwFlags;
|
|
||||||
struct tagWINE_DRIVER* lpPrevItem;
|
|
||||||
struct tagWINE_DRIVER* lpNextItem;
|
|
||||||
} WINE_DRIVER, *LPWINE_DRIVER;
|
|
||||||
|
|
||||||
/* values for dwFlags */
|
|
||||||
#define WINE_DI_TYPE_MASK 0x00000007ul
|
|
||||||
#define WINE_DI_TYPE_16 0x00000001ul
|
|
||||||
#define WINE_DI_TYPE_32 0x00000002ul
|
|
||||||
|
|
||||||
LPWINE_DRIVER DRIVER_RegisterDriver16(LPCSTR, HMODULE16, DRIVERPROC16, LPARAM, BOOL);
|
|
||||||
LPWINE_DRIVER DRIVER_RegisterDriver32(LPCSTR, HMODULE, DRIVERPROC, LPARAM, BOOL);
|
|
||||||
int DRIVER_GetType(HDRVR);
|
|
||||||
|
|
||||||
#endif /* __WINE__ */
|
|
||||||
|
|
||||||
#endif /* __WINE_DRIVER_H */
|
#endif /* __WINE_DRIVER_H */
|
||||||
|
|
118
windows/driver.c
118
windows/driver.c
|
@ -19,13 +19,47 @@
|
||||||
|
|
||||||
DEFAULT_DEBUG_CHANNEL(driver)
|
DEFAULT_DEBUG_CHANNEL(driver)
|
||||||
|
|
||||||
|
/* The following definitions are WINE internals */
|
||||||
|
/* FIXME: This is a WINE internal struct and should be moved in include/wine directory
|
||||||
|
* Please note that WINE shares 16 and 32 bit drivers on a single list...
|
||||||
|
* Basically, we maintain an external double view on drivers, so that a 16 bit drivers
|
||||||
|
* can be loaded/used... by 32 functions transparently
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Who said goofy boy ? */
|
||||||
|
#define WINE_DI_MAGIC 0x900F1B01
|
||||||
|
|
||||||
|
typedef struct tagWINE_DRIVER
|
||||||
|
{
|
||||||
|
DWORD dwMagic;
|
||||||
|
char szAliasName[128];
|
||||||
|
/* as usual LPWINE_DRIVER == hDriver32 */
|
||||||
|
HDRVR16 hDriver16;
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
HMODULE16 hModule;
|
||||||
|
DRIVERPROC16 lpDrvProc;
|
||||||
|
} d16;
|
||||||
|
struct {
|
||||||
|
HMODULE hModule;
|
||||||
|
DRIVERPROC lpDrvProc;
|
||||||
|
} d32;
|
||||||
|
} d;
|
||||||
|
DWORD dwDriverID;
|
||||||
|
DWORD dwFlags;
|
||||||
|
struct tagWINE_DRIVER* lpPrevItem;
|
||||||
|
struct tagWINE_DRIVER* lpNextItem;
|
||||||
|
} WINE_DRIVER, *LPWINE_DRIVER;
|
||||||
|
|
||||||
|
LPWINE_DRIVER DRIVER_RegisterDriver16(LPCSTR, HMODULE16, DRIVERPROC16, LPARAM, BOOL);
|
||||||
|
LPWINE_DRIVER DRIVER_RegisterDriver32(LPCSTR, HMODULE, DRIVERPROC, LPARAM, BOOL);
|
||||||
|
|
||||||
static LPWINE_DRIVER lpDrvItemList = NULL;
|
static LPWINE_DRIVER lpDrvItemList = NULL;
|
||||||
|
|
||||||
/* TODO list :
|
/* TODO list :
|
||||||
* - LoadModule count and clean up is not handled correctly (it's not a
|
* - LoadModule count and clean up is not handled correctly (it's not a
|
||||||
* problem as long as FreeLibrary is not working correctly)
|
* problem as long as FreeLibrary is not working correctly)
|
||||||
* - shoudln't the allocations be done on a per process basis ?
|
* - shoudln't the allocations be done on a per process basis ?
|
||||||
* - get rid of external function "int DRIVER_GetType(HDRVR hDrvr)"
|
|
||||||
* - split 16/32 bit functions between DLLs as windows do (16 bit in USER, 32 bit in WINMM)
|
* - split 16/32 bit functions between DLLs as windows do (16 bit in USER, 32 bit in WINMM)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -63,23 +97,16 @@ static void WINE_UNUSED DRIVER_LoadStartupDrivers(void)
|
||||||
static WORD DRIVER_GetNumberOfModuleRefs(LPWINE_DRIVER lpNewDrv)
|
static WORD DRIVER_GetNumberOfModuleRefs(LPWINE_DRIVER lpNewDrv)
|
||||||
{
|
{
|
||||||
LPWINE_DRIVER lpDrv;
|
LPWINE_DRIVER lpDrv;
|
||||||
DWORD type = lpNewDrv->dwFlags & WINE_DI_TYPE_MASK;
|
|
||||||
WORD count = 0;
|
WORD count = 0;
|
||||||
|
|
||||||
for (lpDrv = lpDrvItemList; lpDrv; lpDrv = lpDrv->lpNextItem) {
|
for (lpDrv = lpDrvItemList; lpDrv; lpDrv = lpDrv->lpNextItem) {
|
||||||
if ((lpDrv->dwFlags & WINE_DI_TYPE_MASK) == type) {
|
if (lpDrv->dwFlags & WINE_GDF_16BIT) {
|
||||||
switch (type) {
|
if (lpDrv->d.d16.hModule == lpNewDrv->d.d16.hModule) {
|
||||||
case WINE_DI_TYPE_16:
|
count++;
|
||||||
if (lpDrv->d.d16.hModule == lpNewDrv->d.d16.hModule)
|
}
|
||||||
count++;
|
} else {
|
||||||
break;
|
if (lpDrv->d.d32.hModule == lpNewDrv->d.d32.hModule) {
|
||||||
case WINE_DI_TYPE_32:
|
count++;
|
||||||
if (lpDrv->d.d32.hModule == lpNewDrv->d.d32.hModule)
|
|
||||||
count++;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
FIXME("Unsupported driver type: %ld\n", type);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -117,18 +144,6 @@ static LPWINE_DRIVER DRIVER_FindFromHDrvr(HDRVR hDrvr)
|
||||||
return DRIVER_FindFromHDrvr16(hDrvr);
|
return DRIVER_FindFromHDrvr16(hDrvr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* DRIVER_GetType [internal]
|
|
||||||
*
|
|
||||||
* From a hDrvr (being 16 or 32 bits), returns TRUE the flags for the driver.
|
|
||||||
*/
|
|
||||||
int DRIVER_GetType(HDRVR hDrvr)
|
|
||||||
{
|
|
||||||
LPWINE_DRIVER lpDrv = DRIVER_FindFromHDrvr(hDrvr);
|
|
||||||
|
|
||||||
return (lpDrv) ? (lpDrv->dwFlags & WINE_DI_TYPE_MASK) : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* DRIVER_MapMsg16To32 [internal]
|
* DRIVER_MapMsg16To32 [internal]
|
||||||
*
|
*
|
||||||
|
@ -475,14 +490,12 @@ LRESULT WINAPI SendDriverMessage16(HDRVR16 hDriver, UINT16 msg, LPARAM lParam1,
|
||||||
|
|
||||||
lpDrv = DRIVER_FindFromHDrvr16(hDriver);
|
lpDrv = DRIVER_FindFromHDrvr16(hDriver);
|
||||||
if (lpDrv != NULL && lpDrv->hDriver16 == hDriver) {
|
if (lpDrv != NULL && lpDrv->hDriver16 == hDriver) {
|
||||||
switch (lpDrv->dwFlags & WINE_DI_TYPE_MASK) {
|
if (lpDrv->dwFlags & WINE_GDF_16BIT) {
|
||||||
case WINE_DI_TYPE_16:
|
|
||||||
TRACE("Before CallDriverProc proc=%p driverID=%08lx hDrv=%u wMsg=%04x p1=%08lx p2=%08lx\n",
|
TRACE("Before CallDriverProc proc=%p driverID=%08lx hDrv=%u wMsg=%04x p1=%08lx p2=%08lx\n",
|
||||||
lpDrv->d.d16.lpDrvProc, lpDrv->dwDriverID, hDriver, msg, lParam1, lParam2);
|
lpDrv->d.d16.lpDrvProc, lpDrv->dwDriverID, hDriver, msg, lParam1, lParam2);
|
||||||
retval = DRIVER_CallTo16_long_lwwll((FARPROC16)lpDrv->d.d16.lpDrvProc, lpDrv->dwDriverID,
|
retval = DRIVER_CallTo16_long_lwwll((FARPROC16)lpDrv->d.d16.lpDrvProc, lpDrv->dwDriverID,
|
||||||
hDriver, msg, lParam1, lParam2);
|
hDriver, msg, lParam1, lParam2);
|
||||||
break;
|
} else {
|
||||||
case WINE_DI_TYPE_32:
|
|
||||||
mapRet = DRIVER_MapMsg16To32(msg, &lParam1, &lParam2);
|
mapRet = DRIVER_MapMsg16To32(msg, &lParam1, &lParam2);
|
||||||
if (mapRet >= 0) {
|
if (mapRet >= 0) {
|
||||||
TRACE("Before func32 call proc=%p driverID=%08lx hDrv=%u wMsg=%04x p1=%08lx p2=%08lx\n",
|
TRACE("Before func32 call proc=%p driverID=%08lx hDrv=%u wMsg=%04x p1=%08lx p2=%08lx\n",
|
||||||
|
@ -494,10 +507,6 @@ LRESULT WINAPI SendDriverMessage16(HDRVR16 hDriver, UINT16 msg, LPARAM lParam1,
|
||||||
} else {
|
} else {
|
||||||
retval = 0;
|
retval = 0;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
default:
|
|
||||||
FIXME("Unknown driver type %08lx\n", lpDrv->dwFlags);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
WARN("Bad driver handle %u\n", hDriver);
|
WARN("Bad driver handle %u\n", hDriver);
|
||||||
|
@ -522,8 +531,7 @@ LRESULT WINAPI SendDriverMessage(HDRVR hDriver, UINT msg, LPARAM lParam1,
|
||||||
lpDrv = DRIVER_FindFromHDrvr(hDriver);
|
lpDrv = DRIVER_FindFromHDrvr(hDriver);
|
||||||
|
|
||||||
if (lpDrv != NULL) {
|
if (lpDrv != NULL) {
|
||||||
switch (lpDrv->dwFlags & WINE_DI_TYPE_MASK) {
|
if (lpDrv->dwFlags & WINE_GDF_16BIT) {
|
||||||
case WINE_DI_TYPE_16:
|
|
||||||
mapRet = DRIVER_MapMsg32To16(msg, &lParam1, &lParam2);
|
mapRet = DRIVER_MapMsg32To16(msg, &lParam1, &lParam2);
|
||||||
if (mapRet >= 0) {
|
if (mapRet >= 0) {
|
||||||
TRACE("Before CallDriverProc proc=%p driverID=%08lx hDrv=%u wMsg=%04x p1=%08lx p2=%08lx\n",
|
TRACE("Before CallDriverProc proc=%p driverID=%08lx hDrv=%u wMsg=%04x p1=%08lx p2=%08lx\n",
|
||||||
|
@ -536,15 +544,10 @@ LRESULT WINAPI SendDriverMessage(HDRVR hDriver, UINT msg, LPARAM lParam1,
|
||||||
} else {
|
} else {
|
||||||
retval = 0;
|
retval = 0;
|
||||||
}
|
}
|
||||||
break;
|
} else {
|
||||||
case WINE_DI_TYPE_32:
|
|
||||||
TRACE("Before func32 call proc=%p driverID=%08lx hDrv=%u wMsg=%04x p1=%08lx p2=%08lx\n",
|
TRACE("Before func32 call proc=%p driverID=%08lx hDrv=%u wMsg=%04x p1=%08lx p2=%08lx\n",
|
||||||
lpDrv->d.d32.lpDrvProc, lpDrv->dwDriverID, hDriver, msg, lParam1, lParam2);
|
lpDrv->d.d32.lpDrvProc, lpDrv->dwDriverID, hDriver, msg, lParam1, lParam2);
|
||||||
retval = lpDrv->d.d32.lpDrvProc(lpDrv->dwDriverID, hDriver, msg, lParam1, lParam2);
|
retval = lpDrv->d.d32.lpDrvProc(lpDrv->dwDriverID, hDriver, msg, lParam1, lParam2);
|
||||||
break;
|
|
||||||
default:
|
|
||||||
FIXME("Unknown driver type %08lx\n", lpDrv->dwFlags);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
WARN("Bad driver handle %u\n", hDriver);
|
WARN("Bad driver handle %u\n", hDriver);
|
||||||
|
@ -671,7 +674,7 @@ LPWINE_DRIVER DRIVER_RegisterDriver16(LPCSTR lpName, HMODULE16 hModule, DRIVERPR
|
||||||
|
|
||||||
lpDrv = HeapAlloc(SystemHeap, 0, sizeof(WINE_DRIVER));
|
lpDrv = HeapAlloc(SystemHeap, 0, sizeof(WINE_DRIVER));
|
||||||
if (lpDrv != NULL) {
|
if (lpDrv != NULL) {
|
||||||
lpDrv->dwFlags = WINE_DI_TYPE_16;
|
lpDrv->dwFlags = WINE_GDF_EXIST|WINE_GDF_16BIT;
|
||||||
lpDrv->dwDriverID = 0;
|
lpDrv->dwDriverID = 0;
|
||||||
lpDrv->hDriver16 = DRIVER_CreateDrvr16();
|
lpDrv->hDriver16 = DRIVER_CreateDrvr16();
|
||||||
lstrcpynA(lpDrv->szAliasName, lpName, sizeof(lpDrv->szAliasName));
|
lstrcpynA(lpDrv->szAliasName, lpName, sizeof(lpDrv->szAliasName));
|
||||||
|
@ -699,7 +702,7 @@ LPWINE_DRIVER DRIVER_RegisterDriver32(LPCSTR lpName, HMODULE hModule, DRIVERPROC
|
||||||
|
|
||||||
lpDrv = HeapAlloc(SystemHeap, 0, sizeof(WINE_DRIVER));
|
lpDrv = HeapAlloc(SystemHeap, 0, sizeof(WINE_DRIVER));
|
||||||
if (lpDrv != NULL) {
|
if (lpDrv != NULL) {
|
||||||
lpDrv->dwFlags = WINE_DI_TYPE_32;
|
lpDrv->dwFlags = WINE_GDF_EXIST;
|
||||||
lpDrv->dwDriverID = 0;
|
lpDrv->dwDriverID = 0;
|
||||||
lpDrv->hDriver16 = DRIVER_CreateDrvr16();
|
lpDrv->hDriver16 = DRIVER_CreateDrvr16();
|
||||||
lstrcpynA(lpDrv->szAliasName, lpName, sizeof(lpDrv->szAliasName));
|
lstrcpynA(lpDrv->szAliasName, lpName, sizeof(lpDrv->szAliasName));
|
||||||
|
@ -908,8 +911,7 @@ HMODULE16 WINAPI GetDriverModuleHandle16(HDRVR16 hDrvr)
|
||||||
TRACE("(%04x);\n", hDrvr);
|
TRACE("(%04x);\n", hDrvr);
|
||||||
|
|
||||||
lpDrv = DRIVER_FindFromHDrvr16(hDrvr);
|
lpDrv = DRIVER_FindFromHDrvr16(hDrvr);
|
||||||
if (lpDrv != NULL && lpDrv->hDriver16 == hDrvr &&
|
if (lpDrv != NULL && lpDrv->hDriver16 == hDrvr && (lpDrv->dwFlags & WINE_GDF_16BIT)) {
|
||||||
(lpDrv->dwFlags & WINE_DI_TYPE_MASK) == WINE_DI_TYPE_16) {
|
|
||||||
hModule = lpDrv->d.d16.hModule;
|
hModule = lpDrv->d.d16.hModule;
|
||||||
}
|
}
|
||||||
TRACE("=> %d\n", hModule);
|
TRACE("=> %d\n", hModule);
|
||||||
|
@ -918,12 +920,24 @@ HMODULE16 WINAPI GetDriverModuleHandle16(HDRVR16 hDrvr)
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* GetDriverFlags [WINMM.13]
|
* GetDriverFlags [WINMM.13]
|
||||||
|
* [in] hDrvr handle to the driver
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0x00000000 if hDrvr is an invalid handle
|
||||||
|
* 0x80000000 if hDrvr is a valid 32 bit driver
|
||||||
|
* 0x90000000 if hDrvr is a valid 16 bit driver
|
||||||
*/
|
*/
|
||||||
DWORD WINAPI GetDriverFlags(HDRVR hDrvr)
|
DWORD WINAPI GetDriverFlags(HDRVR hDrvr)
|
||||||
{
|
{
|
||||||
FIXME("(%04x); stub!\n", hDrvr);
|
LPWINE_DRIVER lpDrv;
|
||||||
/* should I merge it with DRIVER_GetType() ? */
|
DWORD ret = 0;
|
||||||
return 0;
|
|
||||||
|
TRACE("(%04x)\n", hDrvr);
|
||||||
|
|
||||||
|
if ((lpDrv = DRIVER_FindFromHDrvr(hDrvr)) != NULL) {
|
||||||
|
ret = lpDrv->dwFlags;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
@ -937,7 +951,7 @@ HMODULE WINAPI GetDriverModuleHandle(HDRVR hDrvr)
|
||||||
TRACE("(%04x);\n", hDrvr);
|
TRACE("(%04x);\n", hDrvr);
|
||||||
|
|
||||||
lpDrv = DRIVER_FindFromHDrvr(hDrvr);
|
lpDrv = DRIVER_FindFromHDrvr(hDrvr);
|
||||||
if (lpDrv != NULL && (lpDrv->dwFlags & WINE_DI_TYPE_MASK) == WINE_DI_TYPE_32) {
|
if (lpDrv != NULL && !(lpDrv->dwFlags & WINE_GDF_16BIT)) {
|
||||||
hModule = lpDrv->d.d32.hModule;
|
hModule = lpDrv->d.d32.hModule;
|
||||||
}
|
}
|
||||||
TRACE("=> %d\n", hModule);
|
TRACE("=> %d\n", hModule);
|
||||||
|
@ -989,7 +1003,7 @@ BOOL16 WINAPI GetDriverInfo16(HDRVR16 hDrvr, LPDRIVERINFOSTRUCT16 lpDrvInfo)
|
||||||
|
|
||||||
lpDrv = DRIVER_FindFromHDrvr16(hDrvr);
|
lpDrv = DRIVER_FindFromHDrvr16(hDrvr);
|
||||||
if (lpDrv != NULL && lpDrv->hDriver16 == hDrvr &&
|
if (lpDrv != NULL && lpDrv->hDriver16 == hDrvr &&
|
||||||
(lpDrv->dwFlags & WINE_DI_TYPE_MASK) == WINE_DI_TYPE_16) {
|
(lpDrv->dwFlags & WINE_GDF_16BIT)) {
|
||||||
lpDrvInfo->hDriver = lpDrv->hDriver16;
|
lpDrvInfo->hDriver = lpDrv->hDriver16;
|
||||||
lpDrvInfo->hModule = lpDrv->d.d16.hModule;
|
lpDrvInfo->hModule = lpDrv->d.d16.hModule;
|
||||||
lstrcpynA(lpDrvInfo->szAliasName, lpDrv->szAliasName, sizeof(lpDrvInfo->szAliasName));
|
lstrcpynA(lpDrvInfo->szAliasName, lpDrv->szAliasName, sizeof(lpDrvInfo->szAliasName));
|
||||||
|
|
Loading…
Reference in New Issue