判断程序执行用户和活动用户是否一致
来源:互联网 发布:天地图图层数据标准 编辑:程序博客网 时间:2024/05/03 08:02
PWTS_PROCESS_INFOA pi = { 0 };
int i = 0;
DWORD dwSize = 0;
char username[128] = { 0 };
SID_NAME_USE nameuse = SidTypeUser;
char szUName[128];
DWORD dwNameSize;
char curusername[128]={0};
LPSTR pBuffer = NULL;
DWORD dwBufferLen;
//获得当前程序执行用户名
GetUserNameA(szUName,&dwNameSize);
//获取活动sessionid
DWORD dCurSessionId= WTSGetActiveConsoleSessionId();
//获取活动用户名
WTSQuerySessionInformationA(WTS_CURRENT_SERVER_HANDLE,dCurSessionId,WTSUserName,&pBuffer,&dwBufferLen);lstrcpyA(curusername ,pBuffer);
WTSFreeMemory(pBuffer);
//判断是否相等 关闭进程
if (0!=strcmp(curusername,szUName)){
HANDLE hProcessHandle;
ULONG nProcessID;
::GetWindowThreadProcessId( GetSafeHwnd(), &nProcessID );
hProcessHandle = ::OpenProcess( PROCESS_TERMINATE, FALSE,
nProcessID );
BOOL bRet =::TerminateProcess( hProcessHandle, 0 );
}
MessageBoxA(GetSafeHwnd(),szUName,"",0);
//枚举进程
if(WTSEnumerateProcessesA(NULL, 0, 1, &pi, &dwCount) ){
for( i = 0; i < dwCount; i++ )
{
memset( username, 0, sizeof(char) * 128 );
dwSize = 128;
if( LookupAccountSidA(NULL, pi[i].pUserSid, username, &dwSize, NULL, &dwSize, &nameuse) )
{
char* str = new char[MAX_PATH];
sprintf(str,"Process Name: %s Process Id: %d Session Id: %d User Name: %s",pi[i].pProcessName,pi[i].ProcessId,pi[i].SessionId,username);
MessageBoxA(GetSafeHwnd(),str,"",0);
delete[] str;
}
}
}
// 获取当前活动的会话id
DWORD WINAPI GetActiveSessionId()
{
PWTS_SESSION_INFOpSessionInfo;
DWORD dwCount = 0;
DWORD dwSessionId = 0;
dwSessionId = ::WTSGetActiveConsoleSessionId();
if (dwSessionId <= 0){
if (!::WTSEnumerateSessions(WTS_CURRENT_SERVER_HANDLE, 0, 1, &pSessionInfo, &dwCount)){
return -1;
}
for (DWORD i = 0; i < dwCount; ++i){
WTS_SESSION_INFO si = pSessionInfo[i];
if (si.SessionId == WTSActive){
dwSessionId = si.SessionId;
break;
}
}
::WTSFreeMemory(pSessionInfo);
}
return dwSessionId;
}
// 当前用户token
BOOL GetCurrentUserToken( HANDLE& h_primaryToken )
{
BOOL bRet = FALSE;
HANDLE h_currentToken = NULL;
DWORD dwSessionId = 0;
dwSessionId = GetActiveSessionId(); //sessionId = 0时错误
if (!::WTSQueryUserToken(dwSessionId, &h_currentToken)){
return bRet;
}
if (!::DuplicateTokenEx(h_currentToken, MAXIMUM_ALLOWED, NULL, SecurityIdentification, TokenPrimary, &h_primaryToken)){
return bRet;
}
bRet = TRUE;
return bRet;
}
:CreateProcessAsUser
- 判断程序执行用户和活动用户是否一致
- AJAX判断用户是否存在,并且判断两次密码输入是否一致
- 4.设计一个Email邮箱注册应用程序。要求:用户输入完成单击“立即注册”按,判断“密码”和“确认密码”文本框内容是否一致,如果一致在立即注册按钮上方显示用户输入的邮件地址,运行结果如图所示。
- 判断用户是否存在
- 判断用户是否登录
- 判断用户是否在线
- 判断用户是否存在
- 判断用户是否登录
- 判断用户是否登录
- 判断用户是否登录
- Android 判断用户是否第一次运行此程序
- 判断用户是否是测试用户
- 判断用户是否登陆.BaseAction
- 判断是否是Guest用户
- 判断用户是否手机访问
- 判断用户是否手机访问
- 判断用户是否登录方面
- 页面判断用户是否登录
- c++ 智能指针用法详解
- 循环添加100个联系人
- Angular 通过注入 $location 获取与修改当前页面URL
- Java在ACM中的一些运用
- DSL与自动化测试 – 用Python实现简单的DSL
- 判断程序执行用户和活动用户是否一致
- mongodb 索引、聚合操作
- 【转载】参数self详解
- VMware12虚拟机安装苹果MAC10.11
- iOS 9 下写WebView的错误
- Android Studio加载第三方jar包,出现包重复加载的问题解决(:app:compileInsideDebugJava FAILED)
- AngularJS中的滚动加载,通过ngInfiniteScroll实现下拉滚动加载
- poj2771 Guardian of Decency
- Spring Boot 1.4.0 Release Notes 更新日志-01