📄 win.asm
字号:
WM_SOCKET_VERSION1 equ WM_USER+101
WM_SOCKET_VERSION2 equ WM_USER+102
WM_SOCKET_VERSION3 equ WM_USER+103
WM_SOCKET_VERSION4 equ WM_USER+104
WM_SOCKET_LOGON1 equ WM_USER+105
WM_SOCKET_LOGON2 equ WM_USER+106
WM_SOCKET_LOGON3 equ WM_USER+107
WM_SOCKET_LOGON4 equ WM_USER+108
WM_SOCKET_QUERY equ WM_USER+110
WM_SOCKET_PASS equ WM_USER+111
WM_SOCKET_SUPPLY equ WM_USER+112
WM_SOCKET_VERSION5 equ WM_USER+109
IDB_INDEX equ 1001
IDS_TOTAL equ 1002
IDB_LISTNUM equ 1003
IDB_CONFIG equ 1004
IDM_SHOW equ 1005
IDV_USERLIST equ 1000
IDB_RESTART equ 3
IDB_AUTOSTART equ 1000
CallCloseSocket PROTO :DWORD,:DWORD
CallCloseMsgSocket PROTO :DWORD,:DWORD,:DWORD
CallUnCrypt PROTO :DWORD,:DWORD,:DWORD,:DWORD
CallCrypt PROTO :DWORD,:DWORD,:DWORD,:DWORD
CallCalcProc PROTO :DWORD,:DWORD,:DWORD
CallUnCalcProc PROTO :DWORD,:DWORD
StartMonitorLink PROTO :DWORD,:DWORD,:DWORD,:DWORD
ShellSqlCmpVer PROTO :DWORD,:DWORD
ShellSqlFindUser PROTO :DWORD,:DWORD
ShellSqlQueryUser PROTO :DWORD
ShellSqlExecCommand PROTO :DWORD
ShellSqlGetTipInfo PROTO :DWORD,:DWORD
ShellSqlQueryPort PROTO
ShellSqlIsNetSingle PROTO :DWORD
ShellSqlQueryDword PROTO :DWORD
ShellSqlQueryTime PROTO :DWORD,:DWORD,:DWORD,:DWORD
ShellSqlQueryUserSource PROTO :DWORD,:DWORD,:DWORD
CallUpdateUserNum PROTO :DWORD,:DWORD
CallUpdateNetNum PROTO :DWORD,:DWORD
CallGetUserName PROTO :DWORD,:DWORD
CallGetNetName PROTO :DWORD,:DWORD,:DWORD,:DWORD
CallGetUserInfo PROTO :DWORD,:DWORD
CallGetNetInfo PROTO :DWORD,:DWORD
CallModifyUserPass PROTO :DWORD,:DWORD,:DWORD
CallModifyNetPass PROTO :DWORD,:DWORD,:DWORD
CallModifyUserIp PROTO :DWORD,:DWORD,:DWORD,:DWORD
CallSetUserValidate PROTO :DWORD,:DWORD,:DWORD,:DWORD
CallSetUserSingle PROTO :DWORD,:DWORD,:DWORD
CallSupplySingle PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
CallSupplyNetwork PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
CallSupplyNetToSingle PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
CallCmpTimeSize PROTO :DWORD,:DWORD,:DWORD
CallIsNum PROTO :DWORD
CallIsValidateCrd PROTO :DWORD,:DWORD
CallInitLogFile PROTO
CallMakeLogFile PROTO
CallExitLogFile PROTO
GetCurrentPath PROTO :DWORD
TimeToStr2 PROTO :DWORD,:DWORD
CallGetServerConfig PROTO :DWORD
CallChangeServerConfig PROTO :DWORD
WindowCenterProc PROTO :DWORD
CallIsStartSqlServer PROTO
CallChangeSockAttrib PROTO :DWORD
CheckSaveProc PROTO
.data?
hWnd dd ?
hConfigWin dd ?
sSockVer1 dd ?
sSockVer2 dd ?
sSockVer3 dd ?
sSockVer4 dd ?
sSockVer5 dd ?
sSockLogon1 dd ?
sSockLogon2 dd ?
sSockLogon3 dd ?
sSockLogon4 dd ?
hLogonPort1 dd ?
hLogonPort2 dd ?
hLogonPort3 dd ?
hLogonPort4 dd ?
sSockQuery dd ?
sSockSupply dd ?
sSockPass dd ?
hWinRect RECT <?>
.data
hInd1 dd 0
hInd2 dd 0
hInd3 dd 0
hInd4 dd 0
hMonthDay dw 0,31,59,90,120,151,181,212,243,273,304,334
hProcCheckUser db "CREATE PROCEDURE by_CheckUser @User char(100)=NULL,@Pass char(20)=NULL,@LocalIp char(20)=NULL,@type int=0 AS IF @type = 0 "
db "SELECT Number FROM T_Single WHERE (Name=@User)AND(Password=@Pass)AND(State<>1) ELSE SELECT Source,IpAddr,IpSecBegin,IpSecEnd FROM T_Net WHERE "
db "(Name=@User)AND(Number<>0)AND(State<>1)AND((Validate<>1)OR(LocalIp=@LocalIp))",0
hProcCheckVer db "CREATE PROCEDURE by_CheckVer @hVer int=0 AS IF @hVer=0 SELECT SingleVerInfo,ShowPage FROM T_VerInfo "
db "ELSE BEGIN IF @hVer=1 SELECT NetVerInfo,ShowPage FROM T_VerInfo ELSE SELECT ManagerVerInfo,ShowPage FROM T_VerInfo END",0
hSqlStr db "SELECT SupplyCarId FROM T_User WHERE ( (UserName='%s')AND(Password='%s')AND(Amount<>0)AND((UserDisable IS NULL)OR(UserDisable=0))AND((IpAddr1 IS NULL) OR (IsSingle=1)) ) OR"
db "( (UserName='%s')AND(IpAddr1='%s')AND(Amount<>0)AND((UserDisable IS NULL)OR(UserDisable=0))AND((Validate=0)OR(LocalIpAddr='%s')) )",0
.code
ServerDialogProc proc uses ebx edi esi,hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
LOCAL TmpBuff[MAX_PATH]:BYTE
LOCAL ThreadID:DWORD,hPopMenu:DWORD,addrsize:DWORD
LOCAL addrsock:sockaddr
LOCAL lpPoint:POINT
LOCAL lpNoto:NOTIFYICONDATA
LOCAL wsadata:WSADATA
mov eax,uMsg
.if eax == WM_INITDIALOG
m2m hWnd,hWin
invoke CheckSaveProc
invoke GetWindowRect,hWin,addr hWinRect
mov eax,hWinRect.left
sub hWinRect.right,eax
mov eax,hWinRect.top
sub hWinRect.bottom,eax
invoke SetWindowPos,hWin,0,0,0,0,0,SWP_NOMOVE or SWP_NOZORDER or SWP_HIDEWINDOW
invoke PostMessage,hWin,WM_SIZE,SIZE_MINIMIZED,0
invoke LoadIcon,hInstance,lParam
.if eax != 0
invoke SendMessage,hWin,WM_SETICON,ICON_BIG,eax ; 设置窗口图标
.endif
invoke ShellSqlQueryPort
.if eax != 0
invoke SendMessage,hWin,WM_CLOSE,0,0
ret
.endif
invoke WSAStartup,202h,addr wsadata
invoke CreateDialogParam,hInstance,DLG_CONFIG,hWin,offset ConfigDialogProc,0
invoke StartMonitorLink,hWin,addr sSockVer1,41009,WM_SOCKET_VERSION1
invoke StartMonitorLink,hWin,addr sSockVer2,41018,WM_SOCKET_VERSION2
invoke StartMonitorLink,hWin,addr sSockVer3,41023,WM_SOCKET_VERSION3
invoke StartMonitorLink,hWin,addr sSockVer4,40990,WM_SOCKET_VERSION4
invoke StartMonitorLink,hWin,addr sSockVer5,41007,WM_SOCKET_VERSION5
.elseif eax == 287h
invoke PostMessage,hWin,WM_SIZE,SIZE_MINIMIZED,0
.elseif eax == WM_CLOSE
invoke CallCloseMsgSocket,sSockLogon1,hConfigWin,WM_SOCKET_LOGON1
invoke CallCloseMsgSocket,sSockLogon2,hConfigWin,WM_SOCKET_LOGON2
invoke CallCloseMsgSocket,sSockLogon3,hConfigWin,WM_SOCKET_LOGON3
invoke CallCloseMsgSocket,sSockLogon4,hConfigWin,WM_SOCKET_LOGON4
invoke CallCloseMsgSocket,sSockQuery,hConfigWin,WM_SOCKET_QUERY
invoke CallCloseMsgSocket,sSockPass,hConfigWin,WM_SOCKET_PASS
invoke CallCloseMsgSocket,sSockSupply,hConfigWin,WM_SOCKET_SUPPLY
invoke DestroyWindow,hConfigWin
invoke CallExitLogFile
invoke SendMessage,hWin,WM_SHELLNOTIFY,IDI_TRAY,WM_LBUTTONDOWN
invoke ImageList_Destroy,hImageList
invoke CallCloseMsgSocket,sSockVer1,hWin,WM_SOCKET_VERSION1
invoke CallCloseMsgSocket,sSockVer2,hWin,WM_SOCKET_VERSION2
invoke CallCloseMsgSocket,sSockVer3,hWin,WM_SOCKET_VERSION3
invoke CallCloseMsgSocket,sSockVer4,hWin,WM_SOCKET_VERSION4
invoke CallCloseMsgSocket,sSockVer5,hWin,WM_SOCKET_VERSION5
invoke WSACleanup
invoke EndDialog,hWin,lParam
.elseif eax == WM_SIZE && wParam == SIZE_MINIMIZED
mov lpNoto.cbSize,sizeof lpNoto
m2m lpNoto.hwnd,hWin
szText szTip,'BY辅助工具服务端',0dh,0ah,'连接用户:%lu',0
invoke wsprintf,addr lpNoto.szTip,addr szTip,hInd1
mov lpNoto.uID,IDI_TRAY
mov lpNoto.uCallbackMessage,WM_SHELLNOTIFY
mov lpNoto.uFlags,NIF_ICON or NIF_MESSAGE or NIF_TIP
invoke LoadIcon,hInstance,100
mov hTrayIcon,eax
m2m lpNoto.hIcon,hTrayIcon
invoke Shell_NotifyIcon,NIM_ADD,addr lpNoto
invoke ShowWindow,hWin,SW_HIDE
.elseif eax == WM_SHELLNOTIFY && wParam == IDI_TRAY
.if lParam == WM_LBUTTONDOWN
mov lpNoto.cbSize,sizeof lpNoto
m2m lpNoto.hwnd,hWin
mov lpNoto.uID,IDI_TRAY
mov lpNoto.uFlags,NIF_ICON
m2m lpNoto.hIcon,hTrayIcon
invoke Shell_NotifyIcon,NIM_DELETE,addr lpNoto
invoke DeleteObject,hTrayIcon
invoke SendMessage,hWin,WM_SYSCOMMAND,SC_RESTORE,0
;invoke ShowWindow,hWin,SW_SHOW
invoke SetWindowPos,hWin,0,hWinRect.left,hWinRect.top,hWinRect.right,hWinRect.bottom,SWP_NOZORDER or SWP_SHOWWINDOW
.elseif lParam == WM_MOUSEMOVE
mov lpNoto.cbSize,sizeof lpNoto
m2m lpNoto.hwnd,hWin
mov lpNoto.uID,IDI_TRAY
mov lpNoto.uFlags,NIF_TIP
invoke wsprintf,addr lpNoto.szTip,addr szTip,hInd1
invoke Shell_NotifyIcon,NIM_MODIFY,addr lpNoto
.elseif lParam == WM_RBUTTONDOWN
invoke CreatePopupMenu
mov hPopMenu,eax
invoke AppendMenu,hPopMenu,MF_STRING,IDM_SHOW,STEXT('显示窗口')
invoke AppendMenu,hPopMenu,MF_SEPARATOR,-1,0
invoke AppendMenu,hPopMenu,MF_STRING,IDCANCEL,STEXT('退出')
invoke GetCursorPos,addr lpPoint
invoke TrackPopupMenu,hPopMenu,TPM_RIGHTALIGN,lpPoint.x,lpPoint.y,0,hWin,0
invoke DestroyMenu,hPopMenu
.endif
.elseif eax == WM_COMMAND
mov eax,wParam
.if eax == IDCANCEL
invoke SendMessage,hWin,WM_CLOSE,0,0
.elseif eax == IDB_INDEX
invoke ShellSqlQueryUser,STEXT("SELECT COUNT(*) FROM T_Single")
.if eax != -1
mov ebx,eax
invoke ShellSqlQueryUser,STEXT("SELECT COUNT(*) FROM T_Net")
.if eax != -1
lea edx,[eax+ebx]
invoke wsprintf,addr TmpBuff,STEXT('总用户数:%lu(其中个人用户:%lu,网吧用户:%lu)'),edx,eax,ebx
.else
invoke lstrcpy,addr TmpBuff,STEXT('访问数据库失败!')
.endif
.else
invoke lstrcpy,addr TmpBuff,STEXT('访问数据库失败!')
.endif
invoke SetDlgItemText,hWin,IDS_TOTAL,addr TmpBuff
.elseif eax == IDM_SHOW
invoke SendMessage,hWin,WM_SHELLNOTIFY,IDI_TRAY,WM_LBUTTONDOWN
.elseif eax == IDB_CONFIG
invoke ShowWindow,hConfigWin,SW_SHOW
.endif
.elseif eax == WM_SOCKET_VERSION1 || eax == WM_SOCKET_VERSION2 || eax == WM_SOCKET_VERSION3 || eax == WM_SOCKET_VERSION4 || eax == WM_SOCKET_VERSION5
mov eax,lParam ; 版本验证
mov edx,eax
shr edx,16
.if dx != 0
inc hInd4
.if ax == FD_ACCEPT
invoke closesocket,wParam
.else
invoke CallCloseSocket,wParam,hWin
.endif
.elseif ax==FD_ACCEPT
mov addrsize,sizeof addrsock
.if uMsg == WM_SOCKET_VERSION1
invoke accept,sSockVer1,addr addrsock,addr addrsize
invoke CallChangeSockAttrib,eax
.elseif uMsg == WM_SOCKET_VERSION2
invoke accept,sSockVer2,addr addrsock,addr addrsize
invoke CallChangeSockAttrib,eax
.elseif uMsg == WM_SOCKET_VERSION3
invoke accept,sSockVer3,addr addrsock,addr addrsize
invoke CallChangeSockAttrib,eax
.elseif uMsg == WM_SOCKET_VERSION4
invoke accept,sSockVer4,addr addrsock,addr addrsize
invoke CallChangeSockAttrib,eax
.elseif uMsg == WM_SOCKET_VERSION5
invoke accept,sSockVer5,addr addrsock,addr addrsize
invoke CallChangeSockAttrib,eax
.endif
.elseif ax==FD_READ
invoke recv,wParam,addr TmpBuff,3,0
.if eax != 3
inc hInd4
invoke CallCloseSocket,wParam,hWin
ret
.endif
invoke CallCrypt,addr TmpBuff,3,2eh,0d9h
.if TmpBuff != 17h && TmpBuff != 28h && TmpBuff != 39h
inc hInd4
invoke CallCloseSocket,wParam,hWin
ret
.endif
.if uMsg == WM_SOCKET_VERSION5
invoke lstrcpy,addr TmpBuff+1,STEXT('版本更新,请按确定进行自动更新。')
mov TmpBuff,55h
.else
.if TmpBuff == 17h ; 个人版
invoke ShellSqlCmpVer,STEXT("EXEC by_CheckVer 0"),dword ptr TmpBuff+1
.elseif TmpBuff == 28h ; 客户端
invoke ShellSqlCmpVer,STEXT("EXEC by_CheckVer 1"),dword ptr TmpBuff+1
.elseif TmpBuff == 39h ; 管理端
invoke ShellSqlCmpVer,STEXT("EXEC by_CheckVer 2"),dword ptr TmpBuff+1
.endif
mov TmpBuff+125,dl
.if eax == 0
invoke lstrcpy,addr TmpBuff+1,STEXT('OK')
.if TmpBuff == 39h
mov addrsize,sizeof addrsock
invoke getpeername,wParam,addr addrsock,addr addrsize
invoke MemCopy,addr addrsock.sa_data+2,addr TmpBuff+119,4
.endif
.else
invoke lstrcpy,addr TmpBuff+1,STEXT('版本更新,请按确定进行自动更新。')
mov TmpBuff,55h
.endif
.if uMsg == WM_SOCKET_VERSION1
mov eax,hLogonPort1
mov word ptr TmpBuff+123,ax
.elseif uMsg == WM_SOCKET_VERSION2
mov eax,hLogonPort2
mov word ptr TmpBuff+123,ax
.elseif uMsg == WM_SOCKET_VERSION3
mov eax,hLogonPort3
mov word ptr TmpBuff+123,ax
.elseif uMsg == WM_SOCKET_VERSION4
mov eax,hLogonPort4
mov word ptr TmpBuff+123,ax
.endif
.endif
invoke CallUnCrypt,addr TmpBuff,128,2eh,0d9h
invoke send,wParam,addr TmpBuff,128,0
invoke CallCloseSocket,wParam,hWin
.elseif ax == FD_CLOSE
invoke CallCloseSocket,wParam,hWin
.endif
xor eax,eax
ret
.else
xor eax,eax
.endif
ret
ServerDialogProc endp
ConfigDialogProc proc uses ebx edi esi,hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
LOCAL TmpBuff[MAX_PATH]:BYTE
LOCAL PathBuff[MAX_PATH]:BYTE
LOCAL addrsize:DWORD
LOCAL addrsock:sockaddr
mov eax,uMsg
.if eax == WM_INITDIALOG
m2m hConfigWin,hWin
invoke StartMonitorLink,hWin,addr sSockLogon1,hLogonPort1,WM_SOCKET_LOGON1
invoke StartMonitorLink,hWin,addr sSockLogon2,hLogonPort2,WM_SOCKET_LOGON2
invoke StartMonitorLink,hWin,addr sSockLogon3,hLogonPort3,WM_SOCKET_LOGON3
invoke StartMonitorLink,hWin,addr sSockLogon4,hLogonPort4,WM_SOCKET_LOGON4
invoke StartMonitorLink,hWin,addr sSockQuery,40996,WM_SOCKET_QUERY
invoke StartMonitorLink,hWin,addr sSockPass,40995,WM_SOCKET_PASS
invoke StartMonitorLink,hWin,addr sSockSupply,40994,WM_SOCKET_SUPPLY
invoke CallInitLogFile
invoke SetTimer,hWin,1,3600000,0
.elseif eax == WM_CLOSE
invoke ShowWindow,hWin,SW_HIDE
ret
.elseif eax == WM_TIMER && wParam == 1
invoke CallMakeLogFile
.elseif eax == WM_COMMAND
mov eax,wParam
.if eax == IDOK
invoke SendDlgItemMessage,hWin,IDB_AUTOSTART,BM_GETCHECK,0,0
.if eax == BST_CHECKED
invoke CallChangeServerConfig,SERVICE_AUTO_START
.else
invoke CallChangeServerConfig,SERVICE_DEMAND_START
.endif
invoke SendMessage,hWin,WM_CLOSE,0,0
.elseif eax == IDCANCEL
invoke SendMessage,hWin,WM_CLOSE,0,0
.elseif eax == IDB_RESTART
invoke GetModuleFileName,NULL,addr TmpBuff,sizeof TmpBuff
invoke lstrcpy,addr PathBuff,addr TmpBuff
invoke GetCurrentPath,addr PathBuff
invoke ShellExecute,0,0,addr TmpBuff,0,addr PathBuff,SW_SHOWDEFAULT
.endif
.elseif eax == WM_SHOWWINDOW
.if wParam == WA_ACTIVE
invoke CallGetServerConfig,hWin
.if eax == 0
invoke SendDlgItemMessage,hWin,IDB_AUTOSTART,BM_SETCHECK,BST_CHECKED,0
.else
invoke SendDlgItemMessage,hWin,IDB_AUTOSTART,BM_SETCHECK,BST_UNCHECKED,0
.endif
.endif
.elseif eax == WM_SOCKET_LOGON1 || eax == WM_SOCKET_LOGON2 || eax == WM_SOCKET_LOGON3 || eax == WM_SOCKET_LOGON4
mov eax,lParam
mov edx,eax
shr edx,16
.if dx != 0
.if ax == FD_ACCEPT
invoke closesocket,wParam
.else
invoke CallCloseSocket,wParam,hWin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -