📄 ifsmgr.inc
字号:
;
; The FSD may call this api with a NULL ptr for the IOReq, in this
; case a ptr to a filled in netuse_info struct must be passed as
; the third parameter.
;
; Entry TOS = pointer to IOReq
; ir_data = pointer to name (A:, B:, ..., LPT1, ..., \\server\share, ...)
; ir_flags =force level (0-3)
; TOS + 4 = Provider ID (may be -1 for all providers)
; TOS + 8 = ptr to netuse_info struct if ptr to IOReq is null otherwise pass null.
; Exit ir_error = error code (0 for success)
;** IFSMgr_Get_NetTime - Get current time in net format
;
; This service is not valid until IFSMgr performs VNSInitComplete.
;
; Entry None
; Exit EAX = nunber of seconds since 1/1/70
; Uses C registers (eax, ecx, edx, flags)
;** IFSMgr_Get_DOSTime - Get current time in DOS format
;
; This procedure uses the C6 386 _cdecl calling sequence
;
; Returns date/time in DOS format.
; dos format:
; ___________________________
; | hours | minutes | seconds|
; | 5 bit | 6 bits | 5 bits+|
; |__________________________|
; ___________________________
; | years*| months | days |
; | 7 bit | 4 bits | 5 bits |
; |__________________________|
;
; (*) years from 1980
; (+) 2 seconds units
;
; Entry none
; Exit eax = high word is date word in dos format
; low word is time word in dos format
; Uses C registers (eax, ecx, edx, flags)
;** IFSMgr_Get_DOSTimeRounded
;
; Returns two dates/times in DOS format.
;
; The first date/time is accurate to within 10 milliseconds.
; It is returned in the following format.
;
; +-------+---------+--------+-------+---------+--------+--------+
; |*years | months | days | hours | minutes |+seconds|#msec |
; | 7 bit | 4 bits | 5 bits | 5 bit | 6 bits | 5 bits | 8 bits |
; +-------+---------+--------+-------+---------+--------+--------+
;
; (*) years from 1980
; (+) 2 seconds units
; (#) 10 millisecond intervals (0-199)
;
; The second date/time is the first date/time rounded-up to
; the next two second boundary.
;
; +-------+---------+--------+-------+---------+--------+
; |*years | months | days | hours | minutes |+seconds|
; | 7 bit | 4 bits | 5 bits | 5 bit | 6 bits | 5 bits |
; +-------+---------+--------+-------+---------+--------+
;
; ENTRY [eax] = Pointer to date/time structure which the
; dates/times will be returned in. See ifs.h.
;
; struct dos_time_rounded {
; unsigned short dtr_time_rounded;
; unsigned short dtr_date_rounded;
; unsigned short dtr_time;
; unsigned short dtr_date;
; unsigned char dtr_time_msec;
; };
;
; EXIT Date/time structure initialized.
;
; USES eax, ecx, edx, flags
;** IFSMgr_SetupConnection
;** IFSMgr_DerefConnection
;** IFSMgr_ServerDOSCall
;
; This routine checks to see if a server DOS call is being directed
; to a drive/handle which is being managed by the redir. Due to the
; variety of DOS calls that can be routed through this interface, the
; client register state is saved and the the DPL info is loaded into
; the client register structure and the call is routed through the
; preamble for the requested function. If the call is not to be
; intercepted, then the client register state is restored and the
; call is passed on. If the call is intercepted, the saved client
; state is discarded and the call is processed through the normal
; code paths.
;
; Entry ebx = handle of current VM
; ecx = function number
; esi = pointer to DPL32 structure
; ebp = pointer to client registers
; Exit 'C' clear if request taken
; 'C' set if not.
; Uses eax, ebx, ecx, edx, edi, esi, flags
;* DPL - DOS Parameter List
;
; Parameter list structure for the "Server DOS Call".
DPL32 STRUC
DPL32_EAX DD ? ; EAX register
DPL32_EBX DD ? ; EBX register
DPL32_ECX DD ? ; ECX register
DPL32_EDX DD ? ; EDX register
DPL32_ESI DD ? ; ESI register
DPL32_EDI DD ? ; EDI register
DPL32_EBP DD ? ; EBP register
DPL32_UID DW ? ; User (Machine) ID (0 = local macine)
DPL32_PID DW ? ; Process ID (0 = local user PID)
DPL32_DTA DD ? ; Flat pointer to DTA (instead of CurDTA)
DPL32_FLAGS DB ? ; Control flags
DPL32_PAD DB 3 DUP (?) ; pad to dword boundry
DPL32 ENDS
DPL32W STRUC
DPL32_AX DW ? ; AX register
DW ?
DPL32_BX DW ? ; BX register
DW ?
DPL32_CX DW ? ; CX register
DW ?
DPL32_DX DW ? ; DX register
DW ?
DPL32_SI DW ? ; SI register
DW ?
DPL32_DI DW ? ; DI register
DW ?
DPL32_BP DW ? ; BP register
DW ?
DPL32_PID32 DD ? ; 32-bit process ID
DPL32W ENDS
DPL32B STRUC
DPL32_AL DB ? ; AL register
DPL32_AH DB ? ; AH register
DW ?
DPL32_BL DB ? ; BL register
DPL32_BH DB ? ; BH register
DW ?
DPL32_CL DB ? ; CL register
DPL32_CH DB ? ; CH register
DW ?
DPL32_DL DB ? ; DL register
DPL32_DH DB ? ; DH register
DPL32B ENDS
;low 2 bits of DPL32_FLAGS specify character set as follows:
DPL32_USE_ANSI equ 0
DPL32_USE_OEM equ 1
DPL32_USE_UNICODE equ 2
DPL32_8_3_MATCHING equ 4
;** IFSMgr_CompleteAsync
;** IFSMgr_RegisterHeap - Register as a user of the net heap
;
; This service is not valid until IFSMgr performs SysCriticalInit.
;
; This call allows a user of the net heap to register a
; scavenger routine for use by the heap manager.
;
; This procedure uses the C6 386 _cdecl calling sequence
;
; Entry TOS - address of scavenger routine (0 if none)
; TOS+4 - debug flag. (0 if VNetSup_RetHeap called to free heap)
; Exit None
; Uses C registers (eax, ecx, edx, flags)
;** IFSMgr_GetHeap - Allocate a chunk of the net heap
;
; This service is not valid until IFSMgr performs SysCriticalInit.
;
; This procedure uses the C6 386 _cdecl calling sequence
;
; Entry TOS - Size required
; Exit EAX - address of heap chunk. 0 if failure
; Uses C registers (eax, ecx, edx, flags)
;** IFSMgr_RetHeap - Free a chunk of net heap
;
; This service is not valid until IFSMgr performs SysCriticalInit.
;
; This procedure uses the C6 386 _cdecl calling sequence
;
; Entry TOS - address of heap chunk
; Exit None
; Uses C registers (eax, ecx, edx, flags)
;** IFSMgr_CheckHeap - check heap consistancy
;
; This service is not valid until IFSMgr performs SysCriticalInit.
;
; This routine uses the C6 386 _cdecl calling convention
;
; NOTE: On a non-debug build this routine will return 0 without
; doing anything.
;
; Entry TOS - DWORD pointer to heap item (0 for none)
; TOS+4 - DWORD pointer to ASCIIZ filename
; TOS+8 - DWORD line number
; Exit 0 if no error found, non-zero if problem hit.
; Uses C registers (eax, ecx, edx, flags)
;** IFSMgr_CheckHeapItem - check heap item consistancy
;
; This service is not valid until IFSMgr performs SysCriticalInit.
;
; This routine uses the C6 386 _cdecl calling convention
;
; NOTE: On a non-debug build this routine will return 0 without
; doing anything.
;
; NOTE: This call is not valid on freed heap items if
; VNetSup_RetHeap is not used to free the heap item.
;
; Entry TOS - DWORD pointer to heap item
; TOS+4 - DWORD pointer to ASCIIZ filename
; TOS+8 - DWORD line number
; TOS+12- DWORD 0 if item is expected to be free
; 1 if item is expected to be busy
; 2 if don't know
; Exit 0 if no error found, non-zero if problem hit.
; Uses C registers (eax, ecx, edx, flags)
;** IFSMgr_FillHeapSpare
;** IFSMgr_Block
;** IFSMgr_Wakeup
;** IFSMgr_Yield
;** IFSMgr_SchedEvent
;** IFSMgr_QueueEvent
;** IFSMgr_KillEvent
;** IFSMgr_FreeIOReq
;** IFSMgr_MakeMailSlot - Make a MailSlot
;
; A VxD calls this service to make a MailSlot.
;
; This procedure uses the C6 386 _cdecl calling sequence
;
; The read procedure is declared as follows:
; int _cdecl ReadProc(void *pdata, uint len, uchar lana);
;
; Entry TOS = Procedure to be called for mailslot reads
; TOS+4 = pointer ASCIIZ mailslot name (without the "\MAILSLOT\")
; TOS+8 = pointer to INT to receive the mailslot handle
; Exit EAX = error code, 0 for success
; caller clears argument from stack
; Uses C Registers
;** IFSMgr_DeleteMailSlot - Delete a MailSlot
;
; A VxD calls this service to delete a MailSlot.
;
; This procedure uses the C6 386 _cdecl calling sequence
;
; Entry TOS = mailslot handle received from IFSMgr_MakeMailSlot
; Exit EAX = error code, 0 for success
; caller clears argument from stack
; Uses C Registers
;** IFSMgr_WriteMailslot
;
; A VxD calls this service to delete a MailSlot.
;
; This procedure uses the C6 386 _cdecl calling sequence
;
; Entry TOS = pointer to ASCIIZ name (without the "\MAILSLOT\"
; TOS+4 = pointer to data
; TOS+8 = length of data
; TOS+12 = network number
; TOS+16 = pointer to remote name data was received from (or 0 if local)
; immediately followed by local name. both names are 16 bytes long
; TOS+17 = pointer to transport dependant info
; Exit none
; Uses C Registers
;** IFSMgr_PopUp
;
; This procedure uses the C6 386 _cdecl calling sequence
;
; This service is called to put up a popup.
;
; Entry TOS - VMHandle
; TOS+4 - Message Box Flags (MB_SystemModal will be set by VNetSup)
; TOS+8 - Message number
; TOS+12 - Device ID
; Exit EAX - return from SHELL_SYSMODAL_Message
; Uses C registers (eax, ecx, edx, flags)
;** IFSMgr_printf - printf to the debug console
;
; This service is not valid until IFSMgr performs DeviceInit.
;
; This procedure uses the C6 386 _cdecl calling sequence
;
; NOTE: On a non-debug build this routine will return without
; doing anything.
;
; Entry TOS - DWORD pointer to ASCIIZ format string
; TOS+n - parameters as required
; Exit None
; Uses C registers (eax, ecx, edx, flags)
;** IFSMgr_AssertFailed - Print an AssertFailed message
;
; This service is not valid until IFSMgr performs DeviceInit.
;
; This procedure uses the C6 386 _cdecl calling sequence
;
; NOTE: On a non-debug build this routine will return without
; doing anything.
;
; Entry TOS - DWORD pointer to ASCIIZ message
; TOS+4 - DWORD pointer to ASCIIZ filename
; TOS+8 - DWORD line number
; Exit None
; Uses C registers (eax, ecx, edx, flags)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -