1
我希望至少區分我的軟件作爲批處理作業(LOGON32_LOGON_BATCH
)以交互方式運行(LOGON32_LOGON_INTERACTIVE
)時運行的情況。如何查詢正在運行的進程的登錄類型?
我希望至少區分我的軟件作爲批處理作業(LOGON32_LOGON_BATCH
)以交互方式運行(LOGON32_LOGON_INTERACTIVE
)時運行的情況。如何查詢正在運行的進程的登錄類型?
HANDLE hToken;
// Open the current process's token
if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken))
{
// Get the token statistics, which include the logon session id
TOKEN_STATISTICS stats;
DWORD length;
if (GetTokenInformation(hToken, TokenStatistics, &stats, sizeof(stats), &length))
{
// Get data about the logon session, which includes the logon type
PSECURITY_LOGON_SESSION_DATA pData;
if (LsaGetLogonSessionData(&stats.AuthenticationId, &pData) == 0)
{
// From SECURITY_LOGON_TYPE enumeration
switch (pData->LogonType)
{
case Interactive:
wprintf(L"Interactive\n");
break;
case Batch:
wprintf(L"Batch\n");
break;
default:
wprintf(L"Other: %i\n", pData->LogonType);
break;
}
LsaFreeReturnBuffer(pData);
}
}
CloseHandle(hToken);
}
Lsa API來救援,謝謝! – OnTheFly