直接想方便的管理CCProxy代理的帐号管理,  CCProxy -update  更新帐号

http://blog.sina.com.cn/s/blog\_65977dde0100s7tm.html

http://blog.sina.com.cn/s/blog\_65977dde0100s7tm.html



以区别用户身份运转程序

(2011-07-09 09:15:25)

直接想方便的管理CCProxy代理的帐号管理,所以指望做二个相比好的处理工科具。但二个最麻烦的主题素材正是帐号的换代,CCProxy有叁个网页管理功用,可以加帐号,但加的帐号正是不得以及时更新。晚上上网的时候发掘CCProxy有一效果正是辅助命令行的操作,如:

  CCProxy
-reboot  重启软件

  CCProxy -reset  
更新配备

  CCProxy
-update  更新帐号

   

  
试着改了AccInfo.ini中帐号消息,在DOS中运转CCProxy
-update的确更新了账号,所以先河用PHP做管理工科具,做到调用CCProxy
-update时,用了PHP中的exec(),system()等函数一向未有效劳,后又经过调用批处理公事来调用命令行参数都特别。 管理得正没耐心的时候,一气之下狂刷新PHP网页,Computer卡死,用经过管理器查看时发掘张开了多个CCProxy进程,定睛一看,除了三个CCProxy是用户进度外别的CCProxy全部都以system进度。认真一想有比较大大概是运维用户身份各异所产生的结果。

  Apache服务调用的外表程序以system身份运营,本身双击运营的程序以用户地点运维。 假诺CCProxy
-update以用户身份运营是或不是就足以了吧?本身在互联网上找到了runas那几个命令,的确可以内定以哪个用户运维,然而每一遍都要输密码,未有密码的帐
号就要抬高密码才得以用,“/savecred”这一个参数能够用,只要输入三遍密码就能够了,但在PHP中发觉要以system的身份输入三回才行,根本
未有时机输入。希图用C程序来拍卖那几个难题。但是开掘用WinExec(),ShellExecute(),CreateProcess()都倒霉管理那个标题,幸亏意识了CreateProcessAsUser()那几个函数。把网络上的程序改了几处,编写翻译后一试难点总算化解。

   以下为相关代码:

// Update.cpp :
定义调控台应用程序的入口点。

  1. #include “stdafx.h”  
  2. #include <windows.h>  
  3. #include <tlhelp32.h>  
  4.   
  5. BOOL GetTokenByName(HANDLE &hToken,LPSTR lpName)  
  6. {  
  7.     if(!lpName)  
  8.         return FALSE;  
  9.       
  10.     HANDLE         hProcessSnap = NULL;   
  11.     BOOL           bRet      = FALSE;   
  12.     PROCESSENTRY32 pe32      = {0};   
  13.       
  14.     hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);   
  15.     if (hProcessSnap == INVALID_HANDLE_VALUE)   
  16.         return (FALSE);   
  17.       
  18.     pe32.dwSize = sizeof(PROCESSENTRY32);   
  19.       
  20.     if (Process32First(hProcessSnap, &pe32))   
  21.     {    
  22.         do   
  23.         {  
  24.             if(!strcmp(_strupr(pe32.szExeFile),_strupr(lpName)))  
  25.             {  
  26.                 HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION,  
  27.                     FALSE,pe32.th32ProcessID);  
  28.                 bRet = OpenProcessToken(hProcess,TOKEN_ALL_ACCESS,&hToken);  
  29.                 CloseHandle (hProcessSnap);   
  30.                 return (bRet);  
  31.             }  
  32.         }   
  33.         while (Process32Next(hProcessSnap, &pe32));   
  34.         bRet = TRUE;   
  35.     }    
  36.     else   
  37.         bRet = FALSE;  
  38.       
  39.     CloseHandle (hProcessSnap);   
  40.     return (bRet);  
  41. }  
  42.   
  43. BOOL RunProcess(LPCSTR lpImage,LPSTR lpCommandLine)  
  44. {  
  45.     if(!lpImage)  
  46.         return FALSE;  
  47.       
  48.     HANDLE hToken;  
  49.     if(!GetTokenByName(hToken,”EXPLORER.EXE”))  
  50.         return FALSE;  
  51.       
  52.     STARTUPINFO si;  
  53.     PROCESS_INFORMATION pi;  
  54.       
  55.     ZeroMemory(&si, sizeof(STARTUPINFO));  
  56.     si.cb= sizeof(STARTUPINFO);  
  57.     si.lpDesktop = TEXT(“winsta0\\default”);  
  58.       
  59.     BOOL bResult = CreateProcessAsUser(hToken,lpImage, lpCommandLine,NULL,NULL,  
  60.         FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi);  
  61.     CloseHandle(hToken);  
  62.     if(bResult)  
  63.     {  
  64.         OutputDebugString(“CreateProcessAsUser ok!\r\n”);  
  65.         printf(“CreateProcessAsUser ok!\r\n”);  
  66.     }  
  67.     else  
  68.     {  
  69.         OutputDebugString(“CreateProcessAsUse* **lse!\r\n”);  
  70.         printf(“CreateProcessAsUse* **lse!\r\n”);  
  71.     }  
  72.     return bResult;  
  73. }  
  74.   
  75. int _tmain(int argc, _TCHAR* argv[])  
  76. {  
  77.     RunProcess(“CCProxy.exe”,” -update”);  
  78.     return 0;  

以区别用户身份运转程序

(2011-07-09 09:15:25)

直接想方便的处理CCProxy代理的帐号管理,所以指望做贰个相比较好的处理工科具。但三个最麻烦的主题素材正是帐号的换代,CCProxy有一个网页管理功效,能够加帐号,但加的帐号就是不可能马上更新。上午上网的时候开掘CCProxy有一成效就是帮衬命令行的操作,如:
  CCProxy -reboot  重启软件
  CCProxy -reset   更新配备
  CCProxy -update  更新帐号
   
   试着改了AccInfo.ini中帐号消息,在DOS中运转CCProxy
-update的确更新了账号,所以起首用PHP做管理工科具,做到调用CCProxy
-update时,用了PHP中的exec(),system()等函数一向尚未遵从,后又通过调用批管理文件来调用命令行参数都非凡。 管理得正没耐心的时候,一气之下狂刷新PHP网页,计算机卡死,用经过管理器查看时发掘展开了多少个CCProxy进度,猛地一看,除了四个CCProxy是用户进度外别的CCProxy全部是system进度。认真一想有非常大可能率是运效率户身份各异所产生的结果。
  Apache服务调用的表面程序以system身份运维,本身双击运维的次第以用户身份运转。 如若CCProxy -update以用户地点运维是否就足以了啊?自家在互联网上找到了runas那个命令,的确能够钦赐以哪个用户运转,不过每一次都要输密码,未有密码的帐号就要加上密码才足以用,“/savecred”那些参数能够用,只要输入贰回密码就能够了,但在PHP中发觉要以system的身价输入二遍才行,根本
未有机缘输入。筹算用C程序来管理这几个难题。然而发掘用WinExec(),ShellExecute(),CreateProcess()都倒霉管理那一个主题素材,还好开掘了CreateProcessAsUser()这几个函数。把网络上的主次改了几处,编写翻译后一试难题百川归海化解。
   以下为有关代码:
// Update.cpp : 定义调整台应用程序的入口点。

 

  1. #include “stdafx.h”  
  2. #include <windows.h>  
  3. #include <tlhelp32.h>  
  4.   
  5. BOOL GetTokenByName(HANDLE &hToken,LPSTR lpName)  
  6. {  
  7.     if(!lpName)  
  8.         return FALSE;  
  9.       
  10.     HANDLE         hProcessSnap = NULL;   
  11.     BOOL           bRet      = FALSE;   
  12.     PROCESSENTRY32 pe32      = {0};   
  13.       
  14.     hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);   
  15.     if (hProcessSnap == INVALID_HANDLE_VALUE)   
  16.         return (FALSE);   
  17.       
  18.     pe32.dwSize = sizeof(PROCESSENTRY32);   
  19.       
  20.     if (Process32First(hProcessSnap, &pe32))   
  21.     {    
  22.         do   
  23.         {  
  24.             if(!strcmp(_strupr(pe32.szExeFile),_strupr(lpName)))
     // 改成大写
  25.             {  
  26.                 HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION,  
  27.                     FALSE,pe32.th32ProcessID);  
  28.                 bRet = OpenProcessToken(hProcess,TOKEN_ALL_ACCESS,&hToken);  
  29.                 CloseHandle (hProcessSnap);   
  30.                 return (bRet);  
  31.             }  
  32.         }   
  33.         while (Process32Next(hProcessSnap, &pe32));   
  34.         bRet = TRUE;   
  35.     }    
  36.     else   
  37.         bRet = FALSE;  
  38.       
  39.     CloseHandle (hProcessSnap);   
  40.     return (bRet);  
  41. }  
  42.   
  43. BOOL RunProcess(LPCSTR lpImage,LPSTR lpCommandLine)  
  44. {  
  45.     if(!lpImage)  
  46.         return FALSE;  
  47.       
  48.     HANDLE hToken;  
  49.     if(!GetTokenByName(hToken,”EXPLORER.EXE”))  
  50.         return FALSE;  
  51.       
  52.     STARTUPINFO si;  
  53.     PROCESS_INFORMATION pi;  
  54.       
  55.     ZeroMemory(&si, sizeof(STARTUPINFO));  
  56.     si.cb= sizeof(STARTUPINFO);  
  57.     si.lpDesktop = TEXT(“winsta0\\default”);  
  58.       
  59.     BOOL bResult = CreateProcessAsUser(hToken,lpImage, lpCommandLine,NULL,NULL,  
  60.         FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi);  
  61.     CloseHandle(hToken);  
  62.     if(bResult)  
  63.     {  
  64.         OutputDebugString(“CreateProcessAsUser ok!\r\n”);  
  65.         printf(“CreateProcessAsUser ok!\r\n”);  
  66.     }  
  67.     else  
  68.     {  
  69.         OutputDebugString(“CreateProcessAsUse* **lse!\r\n”);  
  70.         printf(“CreateProcessAsUse* **lse!\r\n”);  
  71.     }  
  72.     return bResult;  
  73. }  
  74.   
  75. int _tmain(int argc, _TCHAR* argv[])  
  76. {  
  77.     RunProcess(“CCProxy.exe”,” -update”);  
  78.     return 0;  

 http://www.cnblogs.com/-clq/archive/2012/01/19/2326263.html

 

3楼 likang0712 2012-02-02 11:58发表 [回复]
谢谢 🙂

2楼 santalence 2009-05-23 17:29发表 [回复]
以此艺术真的很好,to aguiwang :解决 GetSaveFileName
的难题,可在调用CreateProcessAsUser前调用下边这几个函数:
BOOL LoadProfile(HANDLE hToken, LPTSTR lpszUserName)
{
BOOL bRet = FALSE;

PROFILEINFO pi;
pi.dwSize = sizeof(PROFILEINFO);
pi.dwFlags = 0;
pi.lpUserName = lpszUserName;
pi.lpDefaultPath = NULL;
pi.lpPolicyPath = NULL;
pi.lpServerName = NULL;
pi.lpProfilePath = NULL;

bRet = ::LoadUserProfile(hToken, &pi);

return bRet;
}

里面包车型地铁lpszUsername 正是时下登入用户名

1楼 aguiwang 2006-08-30 09:00发表 [回复]
idAnts的格局很好,但如此从劳动里用CreateProcessAsUser创制的历程,仍然有调用者的性质.举例在开立出来的长河里弹出Save
file的common dialog是(即调用API
GetSaveFileName),上边的桌面和自家的文书夹照旧LocalService下的,实际不是日前登录用户下的.而Localservice又从不桌面和本身的公文夹目录,所以在采取桌面和本人的文件夹时common
dialog会产出这么的荒谬提醒错误.C:/documents and
settings/localservice/desktop refers to a location that is unavailable.
It could be on a hard drive on this computer,on a network, or on a
different computer on your home network. Check to make sure that the
disk is properly inserted, or that you are connected to the Internet or
home network, and then try again.

 

相关文章