Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

501 lines
9.4 KiB

;
; WINNET.ASM
;
; Access to WINNET calls via user
;
;
memS=1
?WIN=1
?PLM=1
.xlist
include cmacros.inc
.list
WN_SUCCESS equ 0
WN_NOT_SUPPORTED equ 1 ; returned if no function exported
;
; Network information structure, containing the
; list of driver entrypoints
;
netinfo struc
lpfnOpenJob dd ? ; @1
lpfnCloseJob dd ? ; @2
lpfnAbortJob dd ? ; @3
lpfnHoldJob dd ? ; @4
lpfnReleaseJob dd ? ; @5
lpfnCancelJob dd ? ; @6
lpfnSetJobCopies dd ? ; @7
lpfnWatchQueue dd ? ; @8
lpfnUnwatchQueue dd ? ; @9
lpfnLockQueueData dd ? ; @10
lpfnUnlockQueueData dd ? ; @11
lpfnGetConnection dd ? ; @12
lpfnGetCaps dd ? ; @13
lpfnDeviceMode dd ? ; @14
lpfnBrowseDialog dd ? ; @15
lpfnGetUser dd ? ; @16
lpfnAddConnection dd ? ; @17
lpfnCancelConnection dd ? ; @18
lpfnGetError dd ? ; @19
lpfnGetErrorText dd ? ; @20
lpfnEnable dd ? ; @21
lpfnDisable dd ? ; @22
lpfnRestoreConnection dd ? ; @23
lpfnWriteJob dd ? ; @24
lpfnConnectDialog dd ? ; @25
lpfnDisconnectDialog dd ? ; @26
lpfnConnectionDialog dd ? ; @27
lpfnViewQueueDialog dd ? ; @28
lpfnPropertyDialog dd ? ; @29
lpfnGetDirectoryType dd ? ; @30
lpfnDirectoryNotify dd ? ; @31
lpfnGetPropertyText dd ? ; @32
netinfo ends
createSeg _%SEGNAME,cd,word,public,CODE
sBegin data
pNetInfo dw 0 ; near pointer to network information
public pNetInfo
hWinnetDriver dw 0 ; handle to driver module
public hWinnetDriver
sEnd data
sBegin cd
assumes cs,cd
assumes es,data
;-----------------------
; NetCall
;
; Move the offset of the function pointer in the net info structure, and
; call the function which does the bulk of the work (near call). If the
; call runs into an error, it will return, otherwise, it will not return,
; it will pop the return address and jump to the net driver. No prologue
; or epilogue needs to be generated. If CallNetDriver returns, though,
; we need to pop the parameters off the stack. In cMacros, the size of
; these parameters is stored in the ?po variable.
;
; ?po gets set to zero in order to avoid a WHOLE LOT of "possible invalid
; use of nogen" warning messages.
;
; Realize that this is, after all, a hack, the purpose of which is to
; reduce code.
;
NetCall macro lpfn
__pop = ?po
?po = 0
&cBegin <nogen>
mov bx,lpfn
call CallNetDriver
ret __pop
&cEnd <nogen>
endm
;--------------------------------------------------------------------------
; CallNetDriver
;
; This function does all the work. For each entry point there is a small
; piece of code which loads the offset of the function pointer in the net
; info structure into SI and calls this function. This function verifies
; that the net driver is loaded and calls the appropriate function
;
LabelFP <PUBLIC, FarCallNetDriver>
CallNetDriver proc near
mov ax,_DATA
mov es,ax
cmp es:pNetInfo,0 ; net driver loaded?
jz cnd_error ; return error code
add bx,es:pNetInfo ; add the base of the table
cmp word ptr es:[bx+2],0 ; is there a segment there?
jz cnd_error ; NULL, return error code
pop ax ; remove near return address
jmp dword ptr es:[bx] ; jump into net driver
cnd_error:
mov ax,WN_NOT_SUPPORTED ; return error code
ret ; return to entry point code
CallNetDriver endp
;--------------
; WNetGetCaps
;
; This function returns a bitfield of supported functions rather than an
; error code, so we return 0 (no functions supported) instead of an error
; code if there is no driver GetCaps function to call. Also, hack to get
; handle for index -1.
;
cProc WNetGetCaps2, <FAR,PUBLIC>
parmW nIndex
cBegin <nogen>
mov bx,lpfnGetCaps
call CallNetDriver
xor ax,ax
ret ?po
cEnd <nogen>
if 0
; this is now in C (net.c)
assumes ds,data
cProc IWNetGetCaps, <FAR,PUBLIC, NODATA>
parmW nIndex
cBegin
cmp nIndex, 0FFFFh
jz gc_gethandle
cCall WNetGetCaps2, <nIndex>
jmp short gc_exit
gc_gethandle:
mov ax, _DATA
mov es, ax
assumes es, DATA
mov ax, es:hWinnetDriver
assumes es, NOTHING
gc_exit:
cEnd
assumes ds,nothing
endif
;--------------
; IWNetGetUser
;
cProc IWNetGetUser, <FAR,PUBLIC, NODATA>
parmD szUser
parmD lpBufferSize
NetCall lpfnGetUser
;--------------------
; IWNetAddConnection
;
cProc IWNetAddConnection , <FAR, PUBLIC, NODATA>
parmD szNetPath
parmD szPassword
parmD szLocalName
NetCall lpfnAddConnection
;-----------------------
; IWNetCancelConnection
;
cProc IWNetCancelConnection , <FAR, PUBLIC, NODATA>
parmD szName
parmW fForce
NetCall lpfnCancelConnection
;---------------------
; IWNetGetConnection
;
cProc IWNetGetConnection , <FAR, PUBLIC, NODATA>
parmD lpszLocalName
parmD lpszRemoteName
parmD lpcbBuffer
NetCall lpfnGetConnection
;--------------------
; IWNetOpenJob
;
cProc IWNetOpenJob , <FAR, PUBLIC, NODATA>
parmD szQueue
parmD szJobTitle
parmW nCopies
parmD lpfh
NetCall lpfnOpenJob
;--------------------
; IWNetCloseJob
;
cProc IWNetCloseJob , <FAR, PUBLIC, NODATA>
parmW fh
parmD lpidJob
parmD szQueue
NetCall lpfnCloseJob
;-----------------
; IWNetHoldJob
;
cProc IWNetHoldJob , <FAR, PUBLIC, NODATA>
parmD szQueue
parmW idJob
NetCall lpfnHoldJob
;--------------------
; IWNetReleaseJob
;
cProc IWNetReleaseJob , <FAR, PUBLIC, NODATA>
parmD szQueue
parmW idJob
NetCall lpfnReleaseJob
;---------------------
; IWNetCancelJob
;
cProc IWNetCancelJob , <FAR, PUBLIC, NODATA>
parmD szQueue
parmW idJob
NetCall lpfnCancelJob
;--------------------
; IWNetSetJobCopies
;
cProc IWNetSetJobCopies , <FAR, PUBLIC, NODATA>
parmD szQueue
parmW idJob
parmW nCopies
NetCall lpfnSetJobCopies
;--------------------
; IWNetDeviceMode
;
cProc IWNetDeviceMode , <FAR, PUBLIC, NODATA>
parmW hwnd
NetCall lpfnDeviceMode
;--------------------
; IWNetBrowseDialog
;
cProc IWNetBrowseDialog , <FAR, PUBLIC, NODATA>
parmW hwnd
parmW nFunction
parmD szPath
parmD lpnSize
NetCall lpfnBrowseDialog
;--------------------
; IWNetWatchQueue
;
cProc IWNetWatchQueue , <FAR, PUBLIC, NODATA>
parmW hwnd
parmD szLocal
parmD szUsername
parmW wIndex
NetCall lpfnWatchQueue
;--------------------
; IWNetUnwatchQueue
;
cProc IWNetUnwatchQueue , <FAR,PUBLIC, NODATA>
parmD szQueue
NetCall lpfnUnwatchQueue
;---------------------
; IWNetLockQueueData
;
cProc IWNetLockQueueData , <FAR, PUBLIC, NODATA>
parmD szQueue
parmD szUsername
parmD lplpQueue
NetCall lpfnLockQueueData
;------------------------
; IWNetUnlockQueueData
;
cProc IWNetUnlockQueueData , <FAR, PUBLIC, NODATA>
parmD szQueue
NetCall lpfnUnlockQueueData
;------------------------
; IWNetGetError
;
cProc IWNetGetError , <FAR, PUBLIC, NODATA>
parmD lpnError
NetCall lpfnGetError
;------------------------
; IWNetGetErrorText
;
cProc IWNetGetErrorText , <FAR, PUBLIC, NODATA>
parmW nError
parmD lpBuffer
parmD lpnSize
NetCall lpfnGetErrorText
;----------------------
; IWNetAbortJob
;
cProc IWNetAbortJob , <FAR, PUBLIC, NODATA>
parmD lpszQueue
parmW fh
NetCall lpfnAbortJob
;-----------------------
; WNetEnable
;
cProc WNetEnable, <FAR, PUBLIC, EXPORTED>
NetCall lpfnEnable
;------------------------
; WNetDisable
;
cProc WNetDisable, <FAR, PUBLIC, EXPORTED>
NetCall lpfnDisable
;-----------------------
; WNetWriteJob
;
cProc WNetWriteJob , <FAR, PUBLIC, EXPORTED>
parmW hJob
parmD lpData
parmD lpcb
NetCall lpfnWriteJob
;-----------------------
; WNetConnectDialog
;
cProc WNetConnectDialog, <FAR, PUBLIC, EXPORTED>
parmW hwnd
parmW iType
NetCall lpfnConnectDialog
;-----------------------
; WNetDisconnectDialog
;
cProc WNetDisconnectDialog, <FAR, PUBLIC, EXPORTED>
parmW hwnd
parmW iType
NetCall lpfnDisconnectDialog
;-------------------------
; WNetConnectionDialog
;
cProc WNetConnectionDialog, <FAR, PUBLIC, EXPORTED>
parmW hwnd
parmW iType
NetCall lpfnConnectionDialog
;---------------------------
; WNetViewQueueDialog
;
cProc WNetViewQueueDialog, <FAR, PUBLIC, EXPORTED>
parmW hwnd
parmD lpdev
NetCall lpfnViewQueueDialog
;--------------------------
; WNetGetPropertyText
;
cProc WNetGetPropertyText, <FAR, PUBLIC, EXPORTED>
parmW iDlg
parmD lpName
parmW cb
NetCall lpfnGetPropertyText
;--------------------------
; WNetPropertyDialog
;
cProc WNetPropertyDialog, <FAR, PUBLIC, EXPORTED>
parmW hwnd
parmW iDlg
parmD lpfile
NetCall lpfnPropertyDialog
;---------------------------
; WNetGetDirectoryType
;
cProc WNetGetDirectoryType, <FAR, PUBLIC, EXPORTED>
parmD lpdir
parmD lptype
NetCall lpfnGetDirectoryType
;--------------------------
; WNetDirectoryNotify
;
cProc WNetDirectoryNotify, <FAR, PUBLIC, EXPORTED>
parmW hwnd
parmD lpdir
parmW wOper
NetCall lpfnDirectoryNotify
sEnd cd
end