最近在学习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"); //删除用户。
{
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"); //删除用户。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货