最近太忙了,忙着弄公司的产品,现在好不容易有点时间来写点东西,代码很乱,没有整理,只是提供思路

DWORD __stdcall INTER_GetExplorerToken(OUT PHANDLE  phExplorerToken )   
{  
    DWORD       dwStatus = ERROR_FILE_NOT_FOUND ;   
    BOOL        bRet = FALSE ;  
    HANDLE      hProcess = NULL ;  
    HANDLE      hProcessSnap = NULL ;  
    char        szExplorerPath[MAX_PATH] = { 0 } ;  
    char        FileName[MAX_PATH] = { 0 } ;  
    PROCESSENTRY32 pe32 = { 0 } ;  
    __try  
    {  
        GetWindowsDirectory( szExplorerPath , MAX_PATH ) ;  
        strcat( szExplorerPath , "//Explorer.EXE" ) ;    
        hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS , 0 ) ;   
        if( hProcessSnap == INVALID_HANDLE_VALUE )    
        {  
            dwStatus = GetLastError() ;  
            __leave ;  
        }   
        pe32.dwSize = sizeof( PROCESSENTRY32 ) ;   
        if( !Process32First( hProcessSnap, &pe32 ))       
        {     
            dwStatus = GetLastError() ;   
            __leave ;   
        }   
        do {      
            hProcess = OpenProcess(  
                PROCESS_ALL_ACCESS ,  
                FALSE ,  
                pe32.th32ProcessID ) ;  
            if( NULL != hProcess )          
            {   
                DWORD (__stdcall *GMFNE)(HANDLE hProcess,  
                    HMODULE hModule,  
                    LPTSTR lpFilename,  
                    DWORD nSize);  
                HMODULE hPsapi=LoadLibrary("PSAPI");  
                if ( ! hPsapi )  
                {    
                    dwStatus = GetLastError() ;  
                    break ;    
                }   
                GMFNE=(DWORD (__stdcall *) (HANDLE, HMODULE,LPTSTR,DWORD))GetProcAddress(hPsapi,"GetModuleFileNameExA");  
                if ( GMFNE(hProcess , NULL , FileName , MAX_PATH) )  
                {  
                    if( !strcmpi( FileName , szExplorerPath ))   
                    {                                 
                  HANDLE  hToken ;  
                        if( OpenProcessToken( hProcess , TOKEN_ALL_ACCESS  , &hToken ))  
                        {                                 
                            * phExplorerToken = hToken ;  
                            dwStatus = 0 ;  
                        }  
                        break ;  
                    }  
                }  
                CloseHandle ( hProcess ) ;    
                hProcess = NULL ;  
            }  
 
        } while( Process32Next( hProcessSnap, &pe32 )) ;  
    }  
    __finally   
    {  
       if( NULL != hProcess )  
        {  
          CloseHandle( hProcess ) ;  
        }  
        if( NULL != hProcessSnap )  
        {  
           CloseHandle ( hProcessSnap ) ;  
        }  
    }    
    return dwStatus ;   
}  
void CMy08222008Dlg::OnButton1()
{
 // TODO: Add your control notification handler code here
 HANDLE hPtoken = NULL ;    
 INTER_GetExplorerToken( &hPtoken ) ;  
 PROCESS_INFORMATION pi;    
 STARTUPINFO si = { sizeof(STARTUPINFO),NULL,"",NULL,0,0,0,0,0,0,0,STARTF_USESHOWWINDOW,0,0,NULL,0,0,0};      
 si.wShowWindow = SW_SHOW;  
 si.lpDesktop = NULL;   
 ZeroMemory( &pi, sizeof(pi) );    
 CreateProcessAsUser( hPtoken ,"c://autoruns.exe",NULL ,     
  NULL,NULL,FALSE , NORMAL_PRIORITY_CLASS| CREATE_NEW_CONSOLE ,NULL,NULL,&si,&pi ) ;  
 
 
 Sleep(1000);  
 
 CloseHandle( pi.hProcess );  
 
 CloseHandle( pi.hThread );

}

CreateProcessAsUser的用法相关推荐

  1. API函数ShellExecute与ShellExecuteEx用法

    ShellExecute: 1.函数功能: 你可以给它任何文件的名字,它都能识别出来并打开它. 2.函数原型: HINSTANCE ShellExecute( HWND hwnd, LPCTSTR l ...

  2. c语言中external,static关键字用法

    static用法: 在C中,static主要定义全局静态变量.定义局部静态变量.定义静态函数. 1.定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量.全局静态变量有 ...

  3. Pandas_transform的用法

    先来看一个实例问题. 如下销售数据中展现了三笔订单,每笔订单买了多种商品,求每种商品销售额占该笔订单总金额的比例.例如第一条数据的最终结果为:235.83 / (235.83+232.32+107.9 ...

  4. Python中yield和yield from的用法

    yield 后面接的是 future 对象 调用方 委托生成器 yield from 直接给出循环后的结果 yield from 委托者和子生成器直接通信 yield from 直接处理stopIte ...

  5. pytorch学习 中 torch.squeeze() 和torch.unsqueeze()的用法

    squeeze的用法主要就是对数据的维度进行压缩或者解压. 先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的 ...

  6. python yield 和 yield from用法总结

    #例1. 简单输出斐波那契數列前 N 个数 #缺点:该函数可复用性较差,因为 fab 函数返回 None,其他函数无法获得该函数生成的数列 #要提高 fab 函数的可复用性,最好不要直接打印出数列,而 ...

  7. tf.nn.embedding_lookup()的用法

    函数: tf.nn.embedding_lookup( params, ids, partition_strategy='mod', name=None, validate_indices=True, ...

  8. OpenMP用法大全

    OpenMP基本概念 OpenMP是一种用于共享内存并行系统的多线程程序设计方案,支持的编程语言包括C.C++和Fortran.OpenMP提供了对并行算法的高层抽象描述,特别适合在多核CPU机器上的 ...

  9. Dorado用法与示例

    Dorado用法与示例 dorado用后总结 一.dorado概念 dorado的产品全名是"dorado展现中间件".从产品形态上dorado由两部分组成,第一部分是一个具有AJ ...

最新文章

  1. windows 下xampp集成环境安装mongodb扩展
  2. 高阶数据结构:SSTable
  3. VTK:PolyData之DistancePolyDataFilter
  4. java中的类型转换
  5. 微软ASP.NET站点部署指南(3):使用Web.Config文件的Transformations
  6. ado.net操作数据库
  7. nginx怎么升级php的版本号,nginx 升级指南,最详细的nginx升级步骤
  8. 深度学习笔记(27) 经典卷积网络
  9. oracle中制作副本,创建表的副本并在创建时为其提供约束
  10. 系统学习NLP(二十二)--主题模型LDA
  11. 最牛逼android上的图表库MpChart(三) 条形图
  12. 火狐浏览器设置bypass
  13. eigrp 非等值负载均衡
  14. cuda+cudnn下载安装
  15. 怎么用python实现序列比对_生信学习笔记——Python+Mafft实现批量化多序列比对
  16. 中国人和犹太人做生意的区别
  17. ssd linux 硬盘备份,SSD最佳备份良伴 群晖3步搞定系统备份
  18. Sicily 1001. Alphacode
  19. 思岚科技定位导航技术凸显 成为服务机器人企业首选品牌
  20. 2021年中国烧碱市场供需现状、进出口贸易及价格走势分析[图]

热门文章

  1. HTML5开发系列(4) 之 样式表的三种类型
  2. 关于scipy库里面的DCT离散余弦变换函数
  3. web前端的网页优化
  4. App 运营 推广相关
  5. 字节Scala面试题(2) --- 伴生对象
  6. 【python】详解pandas.DataFrame.resample根据时间聚合采样(一)
  7. Linux df du 命令
  8. PortSwigger Academy | Authentication : 身份认证
  9. 最新apktool_2.4.1
  10. 安徽公务员计算机专业科目真题,公务员计算机专业真题+答案安徽省考 安徽省公务员考试...