Commit 0248381a authored by Eric Pouech's avatar Eric Pouech Committed by Alexandre Julliard

Added support for loading drivers in Wine.

parent c1761629
...@@ -24,61 +24,46 @@ ...@@ -24,61 +24,46 @@
#define DRVCNF_CANCEL 0x0000 #define DRVCNF_CANCEL 0x0000
#define DRVCNF_OK 0x0001 #define DRVCNF_OK 0x0001
#define DRVCNF_RESTART 0x0002 #define DRVCNF_RESTART 0x0002
#define DRVEA_NORMALEXIT 0x0001 #define DRVEA_NORMALEXIT 0x0001
#define DRVEA_ABNORMALEXIT 0x0002 #define DRVEA_ABNORMALEXIT 0x0002
#define DRV_SUCCESS 0x0001
#define DRV_FAILURE 0x0000
#define GND_FIRSTINSTANCEONLY 0x00000001 #define GND_FIRSTINSTANCEONLY 0x00000001
#define GND_FORWARD 0x00000000 #define GND_FORWARD 0x00000000
#define GND_REVERSE 0x00000002 #define GND_REVERSE 0x00000002
typedef struct {
DWORD dwDCISize;
LPCSTR lpszDCISectionName;
LPCSTR lpszDCIAliasName;
} DRVCONFIGINFO16, *LPDRVCONFIGINFO16;
/* FIXME: unused? */
typedef struct { typedef struct {
DWORD dwDCISize; DWORD dwDCISize;
LPCSTR lpszDCISectionName; LPCWSTR lpszDCISectionName;
LPCSTR lpszDCIAliasName; LPCWSTR lpszDCIAliasName;
} xDRVCONFIGINFO, *xLPDRVCONFIGINFO; } DRVCONFIGINFO32, *LPDRVCONFIGINFO32;
DECL_WINELIB_TYPE(DRVCONFIGINFO)
DECL_WINELIB_TYPE(LPDRVCONFIGINFO)
/* GetDriverInfo16 references this structure, so this a struct defined /* GetDriverInfo16 references this structure, so this a struct defined
* in the Win16 API. * in the Win16 API.
* GetDriverInfo has been deprecated in Win32.
*/ */
typedef struct typedef struct
{ {
UINT16 length; UINT16 length;
HDRVR16 hDriver; HDRVR16 hDriver;
HINSTANCE16 hModule; HINSTANCE16 hModule;
CHAR szAliasName[128]; CHAR szAliasName[128];
} DRIVERINFOSTRUCT16, *LPDRIVERINFOSTRUCT16; } DRIVERINFOSTRUCT16, *LPDRIVERINFOSTRUCT16;
/* FIXME: Is this a WINE internal struct? */
typedef struct tagDRIVERITEM
{
DRIVERINFOSTRUCT16 dis;
WORD count;
struct tagDRIVERITEM *lpPrevItem;
struct tagDRIVERITEM *lpNextItem;
DRIVERPROC16 lpDrvProc;
} DRIVERITEM, *LPDRIVERITEM;
/* internal */
typedef struct
{
UINT32 length;
HDRVR32 hDriver;
HMODULE32 hModule;
CHAR szAliasName[128];
} DRIVERINFOSTRUCT32A, *LPDRIVERINFOSTRUCT32A;
/* internal */
typedef struct tagDRIVERITEM32A {
DRIVERINFOSTRUCT32A dis;
DWORD count;
struct tagDRIVERITEM32A *next;
DRIVERPROC32 driverproc;
} DRIVERITEM32A,*LPDRIVERITEM32A;
LRESULT WINAPI DefDriverProc16(DWORD dwDevID, HDRVR16 hDriv, UINT16 wMsg, LRESULT WINAPI DefDriverProc16(DWORD dwDevID, HDRVR16 hDriv, UINT16 wMsg,
LPARAM dwParam1, LPARAM dwParam2); LPARAM dwParam1, LPARAM dwParam2);
LRESULT WINAPI DefDriverProc32(DWORD dwDriverIdentifier, HDRVR32 hdrvr, LRESULT WINAPI DefDriverProc32(DWORD dwDriverIdentifier, HDRVR32 hdrvr,
...@@ -107,4 +92,51 @@ HMODULE32 WINAPI GetDriverModuleHandle32(HDRVR32 hDriver); ...@@ -107,4 +92,51 @@ HMODULE32 WINAPI GetDriverModuleHandle32(HDRVR32 hDriver);
HDRVR16 WINAPI GetNextDriver(HDRVR16, DWORD); HDRVR16 WINAPI GetNextDriver(HDRVR16, DWORD);
BOOL16 WINAPI GetDriverInfo(HDRVR16, DRIVERINFOSTRUCT16 *); BOOL16 WINAPI GetDriverInfo(HDRVR16, DRIVERINFOSTRUCT16 *);
/* 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
*/
typedef struct tagWINE_DRIVER
{
char szAliasName[128];
/* as usual LPWINE_DRIVER == hDriver32 */
HDRVR16 hDriver16;
union {
struct {
HMODULE16 hModule;
DRIVERPROC16 lpDrvProc;
} d16;
struct {
HMODULE32 hModule;
DRIVERPROC32 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);
LPWINE_DRIVER DRIVER_RegisterDriver32(LPCSTR, HMODULE32, DRIVERPROC32, LPARAM);
#if 0
#errro "it's never used"
/* internal */
typedef struct
{
UINT32 length;
HDRVR32 hDriver;
HMODULE32 hModule;
CHAR szAliasName[128];
} DRIVERINFOSTRUCT32A, *LPDRIVERINFOSTRUCT32A;
#endif
#endif /* __WINE_DRIVER_H */ #endif /* __WINE_DRIVER_H */
...@@ -4,7 +4,7 @@ type win32 ...@@ -4,7 +4,7 @@ type win32
1 stdcall PlaySoundA(ptr long long) PlaySound32A 1 stdcall PlaySoundA(ptr long long) PlaySound32A
2 stdcall WINMM_2(ptr long long) PlaySound32A 2 stdcall WINMM_2(ptr long long) PlaySound32A
3 stub WINMM_3 3 stub WINMM_3
4 stub CloseDriver 4 stdcall CloseDriver(long long long) CloseDriver32
5 stdcall DefDriverProc(long long long long long) DefDriverProc32 5 stdcall DefDriverProc(long long long long long) DefDriverProc32
6 stub DriverCallback 6 stub DriverCallback
7 stub DrvClose 7 stub DrvClose
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment