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

📄 awe.asm

📁 windows汇编语言程序设计 吴中平著 一书所附所有源代码。 该书重点讲解了Windows环境下汇编语言程序设计的基本原理及其实现过程
💻 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 + -