⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 win.asm

📁 用ASM实现Server及sql操作
💻 ASM
📖 第 1 页 / 共 2 页
字号:
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 + -