📄 awe.asm
字号:
include head.inc
ModalDlgProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
.const
IDD_DIALOG equ 101
IDC_EDIT equ 1000
IDC_SEND equ 1001
IDC_RETRIEVE equ 1002
IDC_CLEAR equ 1003
IDC_EXIT equ 1004
MEM_PHYSICAL equ 400000h
.data
mbi MEMORY_BASIC_INFORMATION <sizeof MEMORY_BASIC_INFORMATION>
TitleName db "AWE地址窗口扩展应用程序",0
NoData db "AWE区暂不存在或者无数据!",0
GrantLockPageRight db "没有获得锁定页的权利",0
dpl db "SeLockMemoryPrivilege",0
PageNum dd 16
pAWE DWORD 0
.data?
hEdit HANDLE ?
hToken HANDLE ?
tkp TOKEN_PRIVILEGES <>
mst MEMORYSTATUS <>
buffer db 200 dup (?)
PageFrame dd 16 dup (?)
.code
start:
invoke GetCurrentProcess
invoke OpenProcessToken,eax,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, addr hToken
invoke LookupPrivilegeValue,NULL,addr dpl,addr tkp.Privileges.Luid
mov tkp.PrivilegeCount,1;只修改一种权限。
mov tkp.Privileges.Attributes,SE_PRIVILEGE_ENABLED;特权有效。
invoke AdjustTokenPrivileges,hToken, FALSE, addr tkp, 0,NULL, 0
invoke CloseHandle,hToken
invoke GlobalMemoryStatus,addr mst
invoke DialogBoxParam,NULL,IDD_DIALOG,NULL,addr ModalDlgProc,NULL
invoke ExitProcess,eax
ModalDlgProc proc hWnd:dword,uMsg:dword,wParam:dword,lParam:dword
local temp:dword
.if uMsg==WM_INITDIALOG
invoke GetDlgItem,hWnd,IDC_EDIT
mov hEdit,eax
invoke SendMessage,hEdit,WM_SETTEXT,0,addr TitleName
invoke VirtualAlloc,NULL,64*1024,MEM_RESERVE or MEM_PHYSICAL,PAGE_READWRITE
mov pAWE,eax
invoke GetCurrentProcess
invoke AllocateUserPhysicalPages,eax, addr PageNum,addr PageFrame
.if !eax
invoke MessageBox,hWnd,addr GrantLockPageRight,addr TitleName,MB_OK
jmp exit
.endif
invoke MapUserPhysicalPages,pAWE,PageNum,addr PageFrame
invoke SetFocus,hEdit
mov eax,FALSE
ret
.elseif uMsg==WM_CLOSE
.if pAWE
invoke GetCurrentProcess
invoke FreeUserPhysicalPages,eax,PageNum,addr PageFrame
.endif
exit:
invoke VirtualFree,pAWE,0,MEM_RELEASE
invoke EndDialog,hWnd,NULL
.elseif uMsg==WM_COMMAND
mov eax,wParam
.if lParam
.if ax==IDC_SEND
invoke GetDlgItemText,hWnd,IDC_EDIT,addr buffer,sizeof buffer
invoke lstrcpy,pAWE,addr buffer
.elseif ax==IDC_RETRIEVE
invoke MessageBox,hWnd,pAWE,addr TitleName,MB_OK
.elseif ax==IDC_CLEAR
invoke VirtualQuery,pAWE,addr mbi,sizeof mbi
invoke VirtualAlloc,pAWE,mbi.RegionSize,MEM_RESET ,PAGE_READWRITE
invoke VirtualAlloc,NULL,mst.dwTotalPhys,MEM_RESERVE or MEM_COMMIT,PAGE_READWRITE
invoke RtlZeroMemory,eax,mst.dwTotalPhys
.elseif ax==IDC_EXIT
invoke EndDialog,hWnd,NULL
.endif
.endif
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
ModalDlgProc endp
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -