| /* |
| * Wine Drivers functions |
| * |
| * Copyright 1994 Martin Ayotte |
| */ |
| |
| static char Copyright[] = "Copyright Martin Ayotte, 1994"; |
| |
| #include "stdio.h" |
| #include "windows.h" |
| #include "win.h" |
| #include "user.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); |
| 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; |
| |
| } |
| |
| |