/* * Wine Drivers functions * * Copyright 1994 Martin Ayotte */ static char Copyright[] = "Copyright Martin Ayotte, 1994"; #include #include "windows.h" #include "win.h" #include "user.h" #include "dlls.h" #include "driver.h" LPDRIVERITEM lpDrvItemList = NULL; /************************************************************************** * SendDriverMessage [USER.251] */ LRESULT WINAPI SendDriverMessage(HDRVR hDriver, WORD msg, LPARAM lParam1, LPARAM lParam2) { printf("SendDriverMessage(%04X, %04X, %08X, %08X);\n", hDriver, msg, lParam1, lParam2); } /************************************************************************** * OpenDriver [USER.252] */ HDRVR OpenDriver(LPSTR lpDriverName, LPSTR lpSectionName, LPARAM lParam) { HDRVR hDrvr; LPDRIVERITEM lpnewdrv; LPDRIVERITEM lpdrv = lpDrvItemList; char DrvName[128]; printf("OpenDriver('%s', '%s', %08X);\n", lpDriverName, lpSectionName, lParam); if (lpSectionName == NULL) lpSectionName = "drivers"; GetPrivateProfileString(lpSectionName, lpDriverName, "", DrvName, sizeof(DrvName), "SYSTEM.INI"); printf("OpenDriver // DrvName='%s'\n", DrvName); if (strlen(DrvName) < 1) return 0; while (lpdrv != NULL) { if (lpdrv->lpNextItem == NULL) break; lpdrv = lpdrv->lpNextItem; } hDrvr = GlobalAlloc(GMEM_MOVEABLE, sizeof(DRIVERITEM)); lpnewdrv = (LPDRIVERITEM) GlobalLock(hDrvr); if (lpnewdrv == NULL) return 0; lpnewdrv->dis.length = sizeof(DRIVERINFOSTRUCT); lpnewdrv->dis.hModule = LoadImage("DrvName", DLL, 0); if (lpnewdrv->dis.hModule == 0) { GlobalUnlock(hDrvr); GlobalFree(hDrvr); return 0; } lpnewdrv->dis.hDriver = hDrvr; strcpy(lpnewdrv->dis.szAliasName, lpDriverName); lpnewdrv->count = 0; lpnewdrv->lpNextItem = NULL; if (lpDrvItemList == NULL || lpdrv == NULL) { lpDrvItemList = lpnewdrv; lpnewdrv->lpPrevItem = NULL; } else { lpdrv->lpNextItem = lpnewdrv; lpnewdrv->lpPrevItem = lpdrv; } lpnewdrv->lpDrvProc = NULL; printf("OpenDriver // hDrvr=%04X loaded !\n", hDrvr); return hDrvr; } /************************************************************************** * CloseDriver [USER.253] */ LRESULT CloseDriver(HDRVR hDrvr, LPARAM lParam1, LPARAM lParam2) { LPDRIVERITEM lpdrv; printf("CloseDriver(%04X, %08X, %08X);\n", hDrvr, lParam1, lParam2); lpdrv = (LPDRIVERITEM) GlobalLock(hDrvr); if (lpdrv != NULL && lpdrv->dis.hDriver == hDrvr) { if (lpdrv->lpPrevItem) ((LPDRIVERITEM)lpdrv->lpPrevItem)->lpNextItem = lpdrv->lpNextItem; if (lpdrv->lpNextItem) ((LPDRIVERITEM)lpdrv->lpNextItem)->lpPrevItem = lpdrv->lpPrevItem; GlobalUnlock(hDrvr); GlobalFree(hDrvr); printf("CloseDriver // hDrvr=%04X closed !\n", hDrvr); return TRUE; } return FALSE; } /************************************************************************** * GetDriverModuleHandle [USER.254] */ HANDLE GetDriverModuleHandle(HDRVR hDrvr) { LPDRIVERITEM lpdrv; HANDLE hModule = 0; printf("GetDriverModuleHandle(%04X);\n", hDrvr); lpdrv = (LPDRIVERITEM) GlobalLock(hDrvr); if (lpdrv != NULL) { hModule = lpdrv->dis.hModule; GlobalUnlock(hDrvr); } return hModule; } /************************************************************************** * DefDriverProc [USER.255] */ LRESULT DefDriverProc(DWORD dwDevID, HDRVR hDriv, WORD wMsg, DWORD dwParam1, DWORD dwParam2) { switch(wMsg) { case DRV_LOAD: return (LRESULT)0L; case DRV_FREE: return (LRESULT)0L; case DRV_OPEN: return (LRESULT)0L; case DRV_CLOSE: return (LRESULT)0L; case DRV_ENABLE: return (LRESULT)0L; case DRV_DISABLE: return (LRESULT)0L; case DRV_QUERYCONFIGURE: return (LRESULT)0L; case DRV_CONFIGURE: MessageBox((HWND)NULL, "Driver isn't configurable !", "Wine Driver", MB_OK); return (LRESULT)0L; case DRV_INSTALL: return (LRESULT)DRVCNF_RESTART; case DRV_REMOVE: return (LRESULT)DRVCNF_RESTART; default: return (LRESULT)0L; } } /************************************************************************** * GetDriverInfo [USER.256] */ BOOL GetDriverInfo(HDRVR hDrvr, LPDRIVERINFOSTRUCT lpDrvInfo) { LPDRIVERITEM lpdrv; printf("GetDriverInfo(%04X, %08X);\n", hDrvr, lpDrvInfo); if (lpDrvInfo == NULL) return FALSE; lpdrv = (LPDRIVERITEM) GlobalLock(hDrvr); if (lpdrv == NULL) return FALSE; memcpy(lpDrvInfo, &lpdrv->dis, sizeof(DRIVERINFOSTRUCT)); GlobalUnlock(hDrvr); return TRUE; } /************************************************************************** * GetNextDriver [USER.257] */ HDRVR GetNextDriver(HDRVR hDrvr, DWORD dwFlags) { LPDRIVERITEM lpdrv; HDRVR hRetDrv = 0; printf("GetNextDriver(%04X, %08X);\n", hDrvr, dwFlags); lpdrv = (LPDRIVERITEM) GlobalLock(hDrvr); if (lpdrv != NULL) { if (dwFlags & GND_REVERSE) if (lpdrv->lpPrevItem) hRetDrv = ((LPDRIVERITEM)lpdrv->lpPrevItem)->dis.hDriver; if (dwFlags & GND_FORWARD) if (lpdrv->lpNextItem) hRetDrv = ((LPDRIVERITEM)lpdrv->lpNextItem)->dis.hDriver; GlobalUnlock(hDrvr); } return hRetDrv; }