b.asm

来自「可以用masm32编译」· 汇编 代码 · 共 84 行

ASM
84
字号
.386
.model flat,stdcall
option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include user32.inc
include advapi32.inc
includelib user32.lib
include kernel32.inc
includelib advapi32.lib
includelib kernel32.lib
.data
ShutdownMess db '确定要关闭电脑吗?',0
ShutdownCaption db "电脑关闭",0
_hProcess dword 0
_hAccessToken dword 0
_TOKEN_PRIVILEGES TOKEN_PRIVILEGES <>
s@	label	byte
	db	"SeShutdownPrivilege",0
.code
start:
invoke MessageBoxA,NULL,offset ShutdownMess,offset ShutdownCaption,MB_OKCANCEL
cmp eax,IDOK
jnz @exit
 ;	
 ;	{
 ;	
 ;	hProcess=GetCurrentProcess();
 ;	
@1:
	call GetCurrentProcess
	mov _hProcess,eax
 ;	
 ;	OpenProcessToken(hProcess,TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hAccessToken);
 ;	
	push offset _hAccessToken
	push 40
	push dword ptr [_hProcess]
	call OpenProcessToken
 ;	
 ;	LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&TOKEN_PRIVILEGES1.Privileges->Luid);
 ;	
      push offset _TOKEN_PRIVILEGES.Privileges.Luid
	push offset s@
	push 0
	call LookupPrivilegeValueA
 ;	
 ;	TOKEN_PRIVILEGES1.Privileges->Attributes=SE_PRIVILEGE_ENABLED;
 ;	

mov _TOKEN_PRIVILEGES.Privileges.Attributes,2
  
 ;	
 ;	TOKEN_PRIVILEGES1.PrivilegeCount=1;
 ;	
	mov _TOKEN_PRIVILEGES.PrivilegeCount,1
 ;	
 ;	
 ;	AdjustTokenPrivileges(hAccessToken,
 ;	
	push 0
	push 0
	push 16
	push offset _TOKEN_PRIVILEGES
	push 0
	push dword ptr [_hAccessToken]
	call AdjustTokenPrivileges
 ;	
 ;	        false,
 ;	        &TOKEN_PRIVILEGES1,
 ;	        sizeof(TOKEN_PRIVILEGES),
 ;	        NULL,
 ;	        NULL);
 ;	ExitWindowsEx(EWX_SHUTDOWN, 0);
 ;	
	push 0
	push EWX_POWEROFF
	call ExitWindowsEx
@exit:
invoke ExitProcess,NULL
end start

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?