hongyver
2004-01-27 05:48:09 UTC
Hello.
I am attempting to use CreateProcessAsUser from a printer driver
(exactly language monitor)
Because I want that soem application run in second user using Fast
User Switching
AdjustTokenPrivileges is a success. But I'm getting the error(1300) in
GetLastError()
ERROR 1300 - Not all privileges referenced are assigned to the caller.
What's wrong? I'm having a hard time doing this.
Thanks for any..
dwSessionId = WTSGetActiveConsoleSessionId();
if (!OpenThreadToken( GetCurrentThread(),TOKEN_ALL_ACCESS,
TRUE,&hThreadToken))
{
hdbg(TEXT("OpenThreadToken Error %d"),GetLastError());
if (hThreadToken) CloseHandle(hThreadToken);
return FALSE;
}
if (!DuplicateTokenEx( hThreadToken,
TOKEN_ALL_ACCESS,
NULL,
SecurityImpersonation,
TokenPrimary,
&hToken ))
{
hdbg(TEXT("DuplicateTokenEx Error %d"),GetLastError());
if (hToken) CloseHandle(hToken);
if (hThreadToken) CloseHandle(hThreadToken);
return FALSE;
}
if (hThreadToken) CloseHandle(hThreadToken);
if (!LookupPrivilegeValue( NULL, SE_TCB_NAME, &tp.Privileges[0].Luid))
{
hdbg(TEXT("LookupPrivilegeValue Error %d"),GetLastError());
if (hToken) CloseHandle(hToken);
return FALSE;
}
tp.PrivilegeCount = 1;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if (!AdjustTokenPrivileges(hToken, FALSE, &tp, 0, NULL, 0) )
{
hdbg(TEXT("AdjustTokenPrivileges Error %d"),err);
if (hToken) CloseHandle(hToken);
return FALSE;
}
err = GetLastError();
if (err != ERROR_SUCCESS )
{
hdbg(TEXT("AdjustTokenPrivileges Success Error %d"),err);
if (hToken) CloseHandle(hToken);
return FALSE;
}
if (!SetTokenInformation(hToken, TokenSessionId, &dwSessionId,
sizeof(DWORD)))
{
hdbg(TEXT("SetTokenInformation Error %d"),GetLastError());
if (hToken) CloseHandle(hToken);
return FALSE;
}
if (!CreateProcessAsUser(hToken,NULL,szCommandLine,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)
)
{
...
I am attempting to use CreateProcessAsUser from a printer driver
(exactly language monitor)
Because I want that soem application run in second user using Fast
User Switching
AdjustTokenPrivileges is a success. But I'm getting the error(1300) in
GetLastError()
ERROR 1300 - Not all privileges referenced are assigned to the caller.
What's wrong? I'm having a hard time doing this.
Thanks for any..
dwSessionId = WTSGetActiveConsoleSessionId();
if (!OpenThreadToken( GetCurrentThread(),TOKEN_ALL_ACCESS,
TRUE,&hThreadToken))
{
hdbg(TEXT("OpenThreadToken Error %d"),GetLastError());
if (hThreadToken) CloseHandle(hThreadToken);
return FALSE;
}
if (!DuplicateTokenEx( hThreadToken,
TOKEN_ALL_ACCESS,
NULL,
SecurityImpersonation,
TokenPrimary,
&hToken ))
{
hdbg(TEXT("DuplicateTokenEx Error %d"),GetLastError());
if (hToken) CloseHandle(hToken);
if (hThreadToken) CloseHandle(hThreadToken);
return FALSE;
}
if (hThreadToken) CloseHandle(hThreadToken);
if (!LookupPrivilegeValue( NULL, SE_TCB_NAME, &tp.Privileges[0].Luid))
{
hdbg(TEXT("LookupPrivilegeValue Error %d"),GetLastError());
if (hToken) CloseHandle(hToken);
return FALSE;
}
tp.PrivilegeCount = 1;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if (!AdjustTokenPrivileges(hToken, FALSE, &tp, 0, NULL, 0) )
{
hdbg(TEXT("AdjustTokenPrivileges Error %d"),err);
if (hToken) CloseHandle(hToken);
return FALSE;
}
err = GetLastError();
if (err != ERROR_SUCCESS )
{
hdbg(TEXT("AdjustTokenPrivileges Success Error %d"),err);
if (hToken) CloseHandle(hToken);
return FALSE;
}
if (!SetTokenInformation(hToken, TokenSessionId, &dwSessionId,
sizeof(DWORD)))
{
hdbg(TEXT("SetTokenInformation Error %d"),GetLastError());
if (hToken) CloseHandle(hToken);
return FALSE;
}
if (!CreateProcessAsUser(hToken,NULL,szCommandLine,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)
)
{
...