黑客软件编写基础知识集合(3)

时间:2006-10-12 来源: 作者: 点击:
系统的定时关机 TOKEN_PRIVILEGES tkp; HANDLE hToken; if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, } LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, //获得本地机唯一的标识 tkp.PrivilegeCount = 1; tkp.Privileges[0].Attr
  
  系统的定时关机
  
  TOKEN_PRIVILEGES tkp;
  HANDLE hToken;
  
  if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
  {
  MessageBox("OpenProcessToken failed!");
  }
  
  LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid); //获得本地机唯一的标识
  tkp.PrivilegeCount = 1;
  tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
  AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES) NULL, 0); //调整获得的权限
  
  if (GetLastError() != ERROR_SUCCESS)
  {
  MessageBox("AdjustTokenPrivileges enable failed!");
  }
  
  fResult =InitiateSystemShutdown(
  NULL, // 要关的计算机用户名,可在局域网网中关掉对方的机器,NULL表示关本机
  "由于系统不稳定,WINDOWS将在上面的时间内关机,请做好保存工作!", // 显示的消息
  10, // 关机所需的时间
  TRUE,
  TRUE); //设为TRUE为重起,设为FALSE为关机
  
  if(!fResult)
  {
  MessageBox("InitiateSystemShutdown failed.");
  }
  
  tkp.Privileges[0].Attributes = 0;
  AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES) NULL, 0);
  
  if (GetLastError() != ERROR_SUCCESS)
  {
  MessageBox("AdjustTokenPrivileges disable failed.");
  }
  
  ExitWindowsEx(EWX_SHUTDOWN,0); //开始关机
  ***********************************************
  
  程序只运行一个实例,并激活前一个实例
  
  具体实现:
  
  1、在程序初始化的时候 (InitInstance()) 枚举所有的窗口,查找本程序的实例是否存在
  2、在主窗口初始化的时候在本窗口的属性列表中添加一个标记,以便程序查找.
  
  部分关键代码
  
  1、在App的InitInstance()中枚举所有窗口,查找本程序实例
  
  HWND oldHWnd = NULL;
  EnumWindows(EnumWndProc,(LPARAM)&oldHWnd); //枚举所有运行的窗口
  if(oldHWnd != NULL)
  {
  AfxMessageBox("本程序已经在运行了");
  ::showWindow(oldHWnd,SW_SHOWNORMAL); //激活找到的前一个程序
  ::setForegroundWindow(oldHWnd); //把它设为前景窗口
  return false; //退出本次运行
  }
  2、添加EnumWndProc窗口过程函数://添加的标识只运行一次的属性名
  CString g_szPropName = "Your Prop Name"; //自己定义一个属性名
  HANDLE g_hValue = (HANDLE)1; //自己定义一个属性值
  
  BOOL CALLBACK EnumWndProc(HWND hwnd,LPARAM lParam)
  {
  HANDLE h = GetProp(hwnd,g_szPropName);
  if( h == g_hValue)
  {
  *(HWND*)lParam = hwnd;
  return false;
  }
  return true;
  }
  3、在主窗口的 OnInitDialog()中添加属性 //设置窗口属性
  SetProp(m_hWnd,g_szPropName,g_hValue);
  
------分隔线----------------------------
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
推荐内容