196 lines
4.3 KiB
NASM
196 lines
4.3 KiB
NASM
page ,132
|
|
;-----------------------------Module-Header-----------------------------;
|
|
; Module Name: DRVR31.ASM - Installable driver code.
|
|
;
|
|
; all this code does is pass any installable driver API on to
|
|
; win 3.1 USER.
|
|
;
|
|
; Created: 28-08-91
|
|
; Author: Todd Laney [ToddLa]
|
|
;
|
|
; Copyright (c) 1984-1991 Microsoft Corporation
|
|
;
|
|
;-----------------------------------------------------------------------;
|
|
|
|
?PLM = 1
|
|
?WIN = 0
|
|
PMODE = 1
|
|
|
|
.xlist
|
|
include cmacros.inc
|
|
include windows.inc
|
|
.list
|
|
|
|
;
|
|
; these are the USER driver interface functions
|
|
;
|
|
externFP OpenDriver ; USER
|
|
externFP CloseDriver ; USER
|
|
externFP GetDriverModuleHandle ; USER
|
|
externFP SendDriverMessage ; USER
|
|
externFP DefDriverProc ; USER
|
|
|
|
ifdef DEBUG
|
|
externFP GetModuleFileName ; KERNEL
|
|
externFP _dprintf ; COMM.ASM
|
|
endif
|
|
|
|
; The following structure should be used to access high and low
|
|
; words of a DWORD. This means that "word ptr foo[2]" -> "foo.hi".
|
|
|
|
LONG struc
|
|
lo dw ?
|
|
hi dw ?
|
|
LONG ends
|
|
|
|
FARPOINTER struc
|
|
off dw ?
|
|
sel dw ?
|
|
FARPOINTER ends
|
|
|
|
ifndef SEGNAME
|
|
SEGNAME equ <_TEXT>
|
|
endif
|
|
|
|
createSeg %SEGNAME, CodeSeg, word, public, CODE
|
|
|
|
sBegin CodeSeg
|
|
assumes cs,CodeSeg
|
|
assumes ds,nothing
|
|
assumes es,nothing
|
|
|
|
;-----------------------------------------------------------------------;
|
|
;-----------------------------------------------------------------------;
|
|
assumes ds,nothing
|
|
assumes es,nothing
|
|
|
|
ifdef DEBUG
|
|
|
|
szSuccess:
|
|
db "MMSYSTEM: DrvOpen(%ls) (%ls)", 13,10,0
|
|
|
|
szFailed:
|
|
db "MMSYSTEM: DrvOpen(%ls) *failed*", 13,10,0
|
|
|
|
cProc DrvOpen, <FAR, PUBLIC, PASCAL, LOADDS>, <>
|
|
ParmD szDriverName
|
|
ParmD szSectionName
|
|
ParmD dw2
|
|
LocalV ach,128
|
|
cBegin
|
|
cCall OpenDriver, <szDriverName, szSectionName, dw2>
|
|
push ax
|
|
|
|
lea bx,szFailed
|
|
or ax,ax
|
|
jz DrvOpenFailed
|
|
|
|
cCall GetDriverModuleHandle, <ax>
|
|
|
|
lea bx,ach
|
|
cCall GetModuleFileName,<ax, ss,bx, 128>
|
|
|
|
lea bx,szSuccess
|
|
|
|
DrvOpenFailed:
|
|
lea ax,ach
|
|
push ss ; ach
|
|
push ax
|
|
|
|
push szDriverName.sel ; szDriverName
|
|
push szDriverName.off
|
|
|
|
push cs ; szFormat
|
|
push bx
|
|
|
|
call _dprintf ; dprintf(szFormat, szDriverName, ach)
|
|
add sp,6*2
|
|
|
|
DrvOpenExit:
|
|
pop ax ; return hdrv to caller
|
|
|
|
DrvOpenExitNow:
|
|
cEnd
|
|
|
|
else ; DEBUG
|
|
|
|
cProc DrvOpen, <FAR, PUBLIC, PASCAL>, <>
|
|
; ParmD szDriverName
|
|
; ParmD szSectionName
|
|
; ParmD dw2
|
|
cBegin nogen
|
|
|
|
jmp OpenDriver
|
|
|
|
cEnd nogen
|
|
|
|
|
|
|
|
|
|
endif ; DEBUG
|
|
|
|
;-----------------------------------------------------------------------;
|
|
;-----------------------------------------------------------------------;
|
|
assumes ds,nothing
|
|
assumes es,nothing
|
|
|
|
cProc DrvClose, <FAR, PUBLIC, PASCAL>, <>
|
|
; ParmW hDriver
|
|
; ParmD dw1
|
|
; ParmD dw2
|
|
cBegin nogen
|
|
|
|
jmp CloseDriver
|
|
|
|
cEnd nogen
|
|
|
|
;-----------------------------------------------------------------------;
|
|
;-----------------------------------------------------------------------;
|
|
assumes ds,nothing
|
|
assumes es,nothing
|
|
|
|
cProc DrvGetModuleHandle, <FAR, PUBLIC, PASCAL>, <>
|
|
; ParmW hDriver
|
|
cBegin nogen
|
|
|
|
jmp GetDriverModuleHandle
|
|
|
|
cEnd nogen
|
|
|
|
;-----------------------------------------------------------------------;
|
|
;-----------------------------------------------------------------------;
|
|
assumes ds,nothing
|
|
assumes es,nothing
|
|
|
|
cProc DrvSendMessage, <FAR, PUBLIC, PASCAL>, <>
|
|
; ParmW hDriver
|
|
; ParmW message
|
|
; ParmD dw1
|
|
; ParmD dw2
|
|
cBegin nogen
|
|
|
|
jmp SendDriverMessage
|
|
|
|
cEnd nogen
|
|
|
|
;-----------------------------------------------------------------------;
|
|
;-----------------------------------------------------------------------;
|
|
assumes ds,nothing
|
|
assumes es,nothing
|
|
|
|
cProc DrvDefDriverProc, <FAR, PUBLIC, PASCAL>, <>
|
|
; ParmD dwDriver
|
|
; ParmW hDriver
|
|
; ParmW message
|
|
; ParmD dw1
|
|
; ParmD dw2
|
|
cBegin nogen
|
|
|
|
jmp DefDriverProc
|
|
|
|
cEnd nogen
|
|
|
|
sEnd
|
|
|
|
end
|