最近在学习VC,在使用CreateProcessWithLogonW的时候发现一奇怪问题,一直解决不了。上来请教下高手。问题如下:void AddTmpUser(LPWSTR sUser,LPWSTR sPassWord)
{
  USER_INFO_1 ui;
  DWORD dwError=0;
   ZeroMemory(&ui, sizeof(ui));
  ui.usri1_name= sUser;
  ui.usri1_password= sPassWord; 
  ui.usri1_priv=USER_PRIV_USER;
  ui.usri1_home_dir = NULL; 
  ui.usri1_comment = NULL;
  ui.usri1_flags=UF_DONT_EXPIRE_PASSWD|UF_PASSWD_CANT_CHANGE;
  ui.usri1_script_path = NULL;
  NetUserAdd(NULL, 1, (LPBYTE)&ui, &dwError);  LOCALGROUP_MEMBERS_INFO_3 account;
  account.lgrmi3_domainandname= ui.usri1_name;
  NetLocalGroupAddMembers(NULL,L"Administrators",3,(LPBYTE)&account,1);}
  
void RunAs(LPCWSTR user, LPCWSTR pass,  LPCWSTR softpath, LPWSTR Cmdline)
{  PROCESS_INFORMATION pi = {0};
  
  STARTUPINFO si;
  ZeroMemory( &si, sizeof(STARTUPINFO) );
  si.cb = sizeof(STARTUPINFO);
  si.dwFlags |= STARTF_USESHOWWINDOW;
  si.wShowWindow = SW_HIDE;
  CreateProcessWithLogonW(user, NULL, pass, 
    LOGON_WITH_PROFILE, softpath, Cmdline,
    CREATE_UNICODE_ENVIRONMENT, NULL, NULL, 
    &si, &pi);  CloseHandle(pi.hProcess);
  CloseHandle(pi.hThread);
  NetUserDel(NULL,user);}
AddTmpUser(L"test",L"test123");   // 添加一个test账户,用来给下边的函数来调用。
//Runs调用系统账户tset 运行记事本成功
//RunAs(L"test",L"test123",L"notepad.exe",L""); //通过cmd.exe来运行notepad.ex成e同样功,通过任务管理器可以看到这两种程序都是调用了系统账户test来运行了。
//RunAs(L"test",L"test123",L"",L"cmd.exe /c notepad.exe"); //而现在通过cmd.exe来调用cacls.exe,而cacls.exe 却不能调用系统账户test来执行。非常奇怪的问题。
RunAs(L"test",L"test123",L"",L"cmd.exe /c echo Y|cacls.exe e:\\tt555 /d everyone"); 
NetUserDel(NULL,  L"test");  //删除用户。