mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
186 lines
4.5 KiB
186 lines
4.5 KiB
;/**********************************************************************/
|
|
;/** Microsoft Windows/NT **/
|
|
;/** Copyright(c) Microsoft Corp., 1994 **/
|
|
;/**********************************************************************/
|
|
|
|
;/*
|
|
; cvxdFile.asm
|
|
;
|
|
; Contains simple VXD File I/O routines (that use VxdInt 21h macro)
|
|
; for dhcp.bin support
|
|
;
|
|
; FILE HISTORY:
|
|
; madana 07-May-1994 Created
|
|
; koti 10-Oct-1994 Copied over/modified for vnbt
|
|
;
|
|
;*/
|
|
|
|
.386p
|
|
include vmm.inc
|
|
include v86mmgr.inc
|
|
include dosmgr.inc
|
|
include opttest.inc
|
|
include netvxd.inc
|
|
include debug.inc
|
|
include pageable.inc
|
|
|
|
EXTRN _fInInit:DWORD
|
|
EXTRN _GetInDosFlag:NEAR
|
|
|
|
|
|
;****************************************************************************
|
|
;** PushState Macro
|
|
;
|
|
; Saves the client state.
|
|
;
|
|
PushState MACRO
|
|
|
|
push edi
|
|
push esi
|
|
push ebx
|
|
|
|
mov ecx, 0
|
|
VMMCall Begin_Critical_Section
|
|
|
|
ENDM
|
|
|
|
;****************************************************************************
|
|
;** PopState Macro
|
|
;
|
|
; Restores client state.
|
|
;
|
|
PopState MACRO
|
|
|
|
VMMCall End_Critical_Section
|
|
|
|
pop ebx
|
|
pop esi
|
|
pop edi
|
|
|
|
ENDM
|
|
|
|
NBT_PAGEABLE_CODE_SEG
|
|
|
|
;****************************************************************************
|
|
;** _VxdFileOpen
|
|
;
|
|
; Opens a file
|
|
;
|
|
; Entry: [ESP+4] - Pointer to full path of file, path must be flat
|
|
; pointer.
|
|
;
|
|
; Exit: EAX will contain a handle to the openned file
|
|
;
|
|
BeginProc _VxdFileOpen
|
|
|
|
PushState ; This pushes lots of crap
|
|
|
|
mov edx, [esp+16] ; move flat pointer file name
|
|
mov eax, 3d02h ; Open file, read/write, share
|
|
|
|
VxDInt 21h
|
|
|
|
jc VFO_6 ; Carry set if error
|
|
jmp VFO_10 ; successful file open, eax has file handle
|
|
|
|
VFO_6:
|
|
; Debug_Out "VxdFileOpen failed, error #EAX"
|
|
mov eax, 0 ; Failed to open the file
|
|
|
|
VFO_10:
|
|
PopState
|
|
ret
|
|
|
|
EndProc _VxdFileOpen
|
|
|
|
|
|
;****************************************************************************
|
|
;** _VxdFileRead
|
|
;
|
|
; Reads x bytes from a previously openned file
|
|
;
|
|
; Entry: [ESP+4] - Handle from _VxdFileOpen
|
|
; [ESP+8] - Count of bytes to read
|
|
; [ESP+12]- flat pointer to destination buffer
|
|
;
|
|
; Exit: EAX will contain the number of bytes read, 0 if EOF or
|
|
; an error occurred.
|
|
;
|
|
BeginProc _VxdFileRead
|
|
|
|
PushState ; Pushes lots of crap
|
|
|
|
mov ebx, [esp+16] ; File Handle
|
|
mov ecx, [esp+20] ; Bytes to read
|
|
mov edx, [esp+24] ; flat buffer pointer
|
|
mov eax, 3f00h
|
|
|
|
VxDInt 21h
|
|
|
|
jc VFR_6 ; Carry set if error
|
|
jmp VFR_7 ; successful file open, eax has bytes read
|
|
|
|
VFR_6:
|
|
; Debug_Out "VxdFileRead failed"
|
|
mov eax, 0 ; Failed to read the file
|
|
VFR_7:
|
|
PopState
|
|
ret
|
|
|
|
EndProc _VxdFileRead
|
|
|
|
;****************************************************************************
|
|
;** _VxdFileClose
|
|
;
|
|
; Closes a file openned with VxdOpenFile
|
|
;
|
|
; Entry: [ESP+4] - Handle from _VxdFileOpen
|
|
;
|
|
BeginProc _VxdFileClose
|
|
|
|
PushState ; Pushes lots of crap
|
|
|
|
mov ebx, [esp+16] ; File Handle
|
|
mov eax, 3e00h
|
|
|
|
VxDInt 21h
|
|
|
|
jc VFCL_6 ; Carry set if error
|
|
jmp VFCL_7 ; successful set.
|
|
|
|
VFCL_6:
|
|
Debug_Out "VxdFileClose - Read failed"
|
|
mov eax, 0 ; Failed to close the file
|
|
VFCL_7:
|
|
PopState
|
|
ret
|
|
|
|
EndProc _VxdFileClose
|
|
|
|
;****************************************************************************
|
|
;** _VxdWindowsPath
|
|
;
|
|
; Gets a pointer to (null-terminated) path to the windows directory
|
|
;
|
|
; This is an Init time only routine
|
|
;
|
|
; Entry: nothing
|
|
;
|
|
; Exit: pointer to path to windows directory
|
|
;
|
|
BeginProc _VxdWindowsPath
|
|
PushState ; Pushes lots of crap
|
|
|
|
VmmCall Get_Config_Directory
|
|
|
|
mov eax, edx ; path is returned in edx
|
|
|
|
PopState ; now pop all that crap
|
|
|
|
ret
|
|
|
|
EndProc _VxdWindowsPath
|
|
|
|
NBT_PAGEABLE_CODE_ENDS
|
|
|
|
END
|