我想通过特权指令来修更改系统时间,请帮忙看看代码中那里有问题....谢谢

AnyStayIsJk 2008-10-25 03:34:08
invoke LookupPrivilegeValue,NULL,offset jkai,addr @Pluid;
invoke RtlZeroMemory,addr @TokenStruct,sizeof @TokenStruct;



push 1
pop @TokenStruct.PrivilegeCount

push @Pluid.LowPart
pop @TokenStruct.Privileges.Luid.LowPart

push @Pluid.HighPart
pop @TokenStruct.Privileges.Luid.HighPart


mov @TokenStruct.Privileges.Attributes,SE_PRIVILEGE_ENABLED
mov eax,@TokenStruct.Privileges.Attributes


;invoke GetCurrentProcess
invoke OpenProcessToken,hInstance,TOKEN_ALL_ACCESS,@Token ;ERROR,这里的返回0,因该不返回0才对,请指点



invoke AdjustTokenPrivileges,addr @Token,FALSE,addr @TokenStruct,0,0,@temp2
.if eax==ERROR_SUCCESS
invoke MessageBox,NULL,offset szTest,offset szCaption,MB_OK
.endif


invoke RtlZeroMemory,addr @timer,sizeof @timer
push 11
pop @timer.wMonth
movzx eax,@timer.wMonth
invoke SetLocalTime,addr @timer

invoke GetLocalTime,addr @timer2

invoke wsprintf,addr szBuffer,addr szStart,@timer2.wMonth
invoke MessageBox,NULL,offset szBuffer,offset szCaption,MB_OK
...全文
164 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnzdgs 2008-10-27
  • 打赏
  • 举报
回复
函数调用,先判断返回值,如果返回失败,再调用GetLastError,返回成功时GetLastError不一定是0,因为GetLastError是取上一次出错的错误码,不是上次操作的结果。
AnyStayIsJk 2008-10-27
  • 打赏
  • 举报
回复
以上方法都用过了,就是不行呀

.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include c:\RadASM\masm\inc\radbg.inc
include advapi32.inc
includelib advapi32.lib

.data
jkai db 'SeSystemtimePrivilege',0
_pri db 'SeDebugPrivilege',0
.data?
_dwadv dd ?
szBuffer db 256 dup (?)
@timer SYSTEMTIME <>
@timer2 SYSTEMTIME <>
.const
szStart db 'return : %d!',0
szCaption db '恭喜',0
jk db '6',0
szText db 'jiangkaizxw当您看到这个信息的时候,您已经可以编译Win32汇编程序了!',0
.code
_power proc uses ecx
local @hToken,@tkp:TOKEN_PRIVILEGES
local @tkp2:TOKEN_PRIVILEGES
push sizeof @tkp
lea eax,@tkp
push eax
call RtlZeroMemory

;invoke GetCurrentProcess
;mov ecx,eax
invoke OpenProcessToken,-1,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, addr @hToken

.if !eax
mov eax,0
ret
.endif
invoke LookupPrivilegeValue,NULL,addr _pri,addr @tkp.Privileges[0].Luid

.if eax
mov @tkp.PrivilegeCount,1
mov @tkp.Privileges[0].Attributes,SE_PRIVILEGE_ENABLED
invoke AdjustTokenPrivileges,@hToken,0,addr @tkp,NULL,NULL,NULL
invoke GetLastError

.if eax!=ERROR_SUCCESS
mov eax,0
ret
.endif

mov eax,1
ret
.endif
mov eax,0
ret
_power endp
start:
call _power

invoke RtlZeroMemory,addr @timer,sizeof @timer
push 2
pop @timer.wMonth
movzx eax,@timer.wMonth
invoke SetLocalTime,addr @timer

invoke GetLocalTime,addr @timer2

invoke wsprintf,addr szBuffer,addr szStart,@timer2.wMonth
invoke MessageBox,NULL,offset szBuffer,offset szCaption,MB_OK
invoke ExitProcess,NULL
end start
cnzdgs 2008-10-25
  • 打赏
  • 举报
回复
hInstance不是进程句柄,用GetCurrentProcess的返回值,或者直接用-1也可以。
大熊猫侯佩 2008-10-25
  • 打赏
  • 举报
回复
你有没有打开该进程token的权限,建议用GetLastError看看出错码。

21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧