CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  VC.NET

想不通

楼主wylcy()2003-02-03 10:47:01 在 .NET技术 / VC.NET 提问

CSDN   -   专家门诊   -   问题    
    推荐给朋友   |   关闭窗口      
     
     
     
      主  题:     想不通    
  作  者:     wylcy   ()      
  等  级:        
  信   誉   分:     100    
  人  气:     0    
  所属论坛:     .NET技术   VC.NET    
  问题点数:     20        
  回复次数:     0    
  发表时间:     2003-2-3   10:45:40    
         
     
         
  typedef     struct     _RemotePara{//参数结构          
        char     pMessageBox[12];          
        DWORD     dwMessageBox;          
  }RemotePara;          
  //远程线程          
  DWORD     __stdcall     ThreadProc     (RemotePara     *lpPara){          
        typedef     int     (__stdcall     *MMessageBoxA)(HWND,LPCTSTR,LPCTSTR,DWORD);//定义MessageBox函数          
        MMessageBoxA     myMessageBoxA;          
        myMessageBoxA     =(MMessageBoxA)     lpPara->dwMessageBox     ;//得到函数入口地址          
        myMessageBoxA(NULL,lpPara->pMessageBox     ,lpPara->pMessageBox,0);//call          
        return     0;          
  }          
  void     EnableDebugPriv();//提升应用级调试权限          
     
     
  int     main(int     argc,     char*     argv[]){          
        const     DWORD     THREADSIZE=1024*4;          
        DWORD     byte_write;          
        EnableDebugPriv();//提升权限          
        HANDLE     hWnd     =     ::OpenProcess     (PROCESS_ALL_ACCESS,FALSE,3560);     //3560是      
                                                                                                                                                                                                    //     随便找的一个ProcessId      
        if(!hWnd)return     0;          
        void     *pRemoteThread     =::VirtualAllocEx(hWnd,0,THREADSIZE,MEM_COMMIT     ¦     MEM_RESERVE,PAGE_EXECUTE_READWRITE);          
        if(!pRemoteThread)return     0;          
        if(!::WriteProcessMemory(hWnd,pRemoteThread,&ThreadProc,THREADSIZE,0))          
        return     0;          
     
        //再付值          
        RemotePara     myRemotePara;          
        ::ZeroMemory(&myRemotePara,sizeof(RemotePara));          
        HINSTANCE     hUser32     =     ::LoadLibrary     ("user32.dll");          
        myRemotePara.dwMessageBox     =(DWORD)     ::GetProcAddress     (hUser32     ,     "MessageBoxA");          
        strcat(myRemotePara.pMessageBox,"hello\0");          
        //写进目标进程          
        RemotePara     *pRemotePara     =(RemotePara     *)     ::VirtualAllocEx     (hWnd     ,0,sizeof(RemotePara),MEM_COMMIT,PAGE_READWRITE);//注意申请空间时的页面属性          
        if(!pRemotePara)return     0;          
        if(!::WriteProcessMemory     (hWnd     ,pRemotePara,&myRemotePara,sizeof     myRemotePara,0))return     0;          
     
        //启动线程          
        HANDLE     hThread     =     ::CreateRemoteThread     (hWnd     ,0,0,(DWORD     (__stdcall     *)(void     *))pRemoteThread     ,pRemotePara,0,&byte_write);          
        if(!hThread){          
            return     0;          
        }          
  return     0;          
  }          
     
     
  //提升权限          
  void     EnableDebugPriv(     void     )          
  {          
  HANDLE     hToken;          
  LUID     sedebugnameValue;          
  TOKEN_PRIVILEGES     tkp;          
     
  if     (     !     OpenProcessToken(     GetCurrentProcess(),          
  TOKEN_ADJUST_PRIVILEGES         ¦     TOKEN_QUERY,     &hToken     )     )          
  return;          
  if     (     !     LookupPrivilegeValue(     NULL,     SE_DEBUG_NAME,     &sedebugnameValue     )     ){          
  CloseHandle(     hToken     );          
  return;          
  }          
  tkp.PrivilegeCount     =     1;          
  tkp.Privileges[0].Luid     =     sedebugnameValue;          
  tkp.Privileges[0].Attributes     =     SE_PRIVILEGE_ENABLED;          
  if     (     !     AdjustTokenPrivileges(     hToken,     FALSE,     &tkp,     sizeof     tkp,     NULL,     NULL     )     )          
  CloseHandle(     hToken     );          
  }          
     
     
  这段代码在VC6中能用,但放在在VC.net中的一个按钮事件中就出错了      
  问题点数:0、回复次数:0Top

相关问题

关键词

  • .net
  • lppara
  • mmessageboxa
  • pmessagebox
  • mymessageboxa
  • remotepara
  • hwnd
  • dword

得分解答快速导航

  • 帖主:wylcy

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo