调用winAPI方法,LogonUser,来模拟用户,win2000server 操作系统有的机器可以模拟,有的机器不能则不行,有文章说
win2000还需要一个特权,SE_TCB_NAME,一般进程是没有这个特权的,也无法获得这个特权。只有服务才有。所以win2000中,一般进程是无法LogonUser成功的。但服务进程中可以。请问C#如何提升进程特权以下是VC提升的方法,如何转换成C#
BOOL SetPrivilege (LPCTSTR privilege, BOOL bEnable)
{
TOKEN_PRIVILEGES tpPrev;
TOKEN_PRIVILEGES tpNew;
LUID luid;
HANDLE hProcToken;
DWORD cbPrev; if (!OpenProcessToken (GetCurrentProcess (),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
&hProcToken))
{
print_msg (TEXT ("OpenProcessToken"));
return FALSE;
}; if (!LookupPrivilegeValue (NULL, privilege, &luid))
{
print_msg (TEXT ("LookupPrivilegeValue"));
return FALSE;
}; tpNew.PrivilegeCount = 1;
tpNew.Privileges [0].Luid = luid;
tpNew.Privileges [0].Attributes = 0; if (!AdjustTokenPrivileges (hProcToken, FALSE,
&tpNew, sizeof (TOKEN_PRIVILEGES),
&tpPrev, &cbPrev))
{
print_msg (TEXT ("AdjustTokenPrivileges"));
return FALSE;
};
tpPrev.PrivilegeCount = 1;
tpPrev.Privileges[0].Luid = luid; if(bEnable)
tpPrev.Privileges[0].Attributes |= (SE_PRIVILEGE_ENABLED);
else
tpPrev.Privileges[0].Attributes ^= (SE_PRIVILEGE_ENABLED & tpPrev.Privileges[0].Attributes); if (!AdjustTokenPrivileges (hProcToken, FALSE,
&tpPrev, cbPrev, NULL, NULL))
{
print_msg (TEXT ("AdjustTokenPrivileges"));
return FALSE;
} CloseHandle (hProcToken);
return TRUE;
};
win2000还需要一个特权,SE_TCB_NAME,一般进程是没有这个特权的,也无法获得这个特权。只有服务才有。所以win2000中,一般进程是无法LogonUser成功的。但服务进程中可以。请问C#如何提升进程特权以下是VC提升的方法,如何转换成C#
BOOL SetPrivilege (LPCTSTR privilege, BOOL bEnable)
{
TOKEN_PRIVILEGES tpPrev;
TOKEN_PRIVILEGES tpNew;
LUID luid;
HANDLE hProcToken;
DWORD cbPrev; if (!OpenProcessToken (GetCurrentProcess (),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
&hProcToken))
{
print_msg (TEXT ("OpenProcessToken"));
return FALSE;
}; if (!LookupPrivilegeValue (NULL, privilege, &luid))
{
print_msg (TEXT ("LookupPrivilegeValue"));
return FALSE;
}; tpNew.PrivilegeCount = 1;
tpNew.Privileges [0].Luid = luid;
tpNew.Privileges [0].Attributes = 0; if (!AdjustTokenPrivileges (hProcToken, FALSE,
&tpNew, sizeof (TOKEN_PRIVILEGES),
&tpPrev, &cbPrev))
{
print_msg (TEXT ("AdjustTokenPrivileges"));
return FALSE;
};
tpPrev.PrivilegeCount = 1;
tpPrev.Privileges[0].Luid = luid; if(bEnable)
tpPrev.Privileges[0].Attributes |= (SE_PRIVILEGE_ENABLED);
else
tpPrev.Privileges[0].Attributes ^= (SE_PRIVILEGE_ENABLED & tpPrev.Privileges[0].Attributes); if (!AdjustTokenPrivileges (hProcToken, FALSE,
&tpPrev, cbPrev, NULL, NULL))
{
print_msg (TEXT ("AdjustTokenPrivileges"));
return FALSE;
} CloseHandle (hProcToken);
return TRUE;
};
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货