最近在学习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.exe同样成功,通过任务管理器可以看到这两种程序都是调用了系统账户test来运行了的。
//RunAs(L"test",L"test123",L"",L"cmd.exe /c notepad.exe");
//而现在通过cmd.exe来调用cacls.exe来设置文件夹的权限;查看tt555文件夹权限是设置成功,可是不是调用test账户来设置的,用的是当前的系统账户设置的。
//查看文件夹权限成功与否的标志是:在当前账户通过test账户来运行下边的命令的话,在我的电脑里边查看tt555文件夹“安全”属性选项卡是灰色的。直接设置不了的。
RunAs(L"test",L"test123",L"",L"cmd.exe /c echo Y|cacls.exe e:\\tt555 /d everyone");
NetUserDel(NULL, L"test"); //删除用户。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课