// KillProcess.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include "tlhelp32.h"
#include <WinBase.h>
#pragma comment(lib,"Advapi32.lib")
#include "lm.h"
#include <WtsApi32.h>
#pragma comment(lib,"WtsApi32.lib")
BOOL SetPrivilege(HANDLE hToken, LPCTSTR lpszPrivilege, BOOL bEnablePrivilege)
{
TOKEN_PRIVILEGES tp;
LUID luid;
if (!LookupPrivilegeValue(NULL, lpszPrivilege, &luid))
{
printf("\nLookupPrivilegeValue error:%d", GetLastError());
return FALSE;
}
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
if (bEnablePrivilege)
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
else
tp.Privileges[0].Attributes = 0;
AdjustTokenPrivileges(
hToken,
FALSE,
&tp,
sizeof(TOKEN_PRIVILEGES),
(PTOKEN_PRIVILEGES)NULL,
(PDWORD)NULL);
int a = GetLastError();
if (GetLastError() != ERROR_SUCCESS)
{
printf("AdjustTokenPrivileges failed: %u\n", GetLastError());
return FALSE;
}
return TRUE;
}
BOOL CALLBACK EnablePrivilege(LPCTSTR lpszPrivilegeName, BOOL bEnable)
{
HANDLE hToken;
TOKEN_PRIVILEGES tp;
LUID luid;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES |
TOKEN_QUERY | TOKEN_READ, &hToken))
return FALSE;
if (!LookupPrivilegeValue(NULL, lpszPrivilegeName, &luid))
return TRUE;
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = (bEnable) ? SE_PRIVILEGE_ENABLED : 0;
AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), NULL, NULL);
CloseHandle(hToken);
return (GetLastError() == ERROR_SUCCESS);
}
int _tmain(int argc, _TCHAR* argv[])
{
//HANDLE hProcessSnap = NULL;
//PROCESSENTRY32 pe32 = { 0 };
//HANDLE hProcess = NULL, hProcessToken = NULL;
//BOOL IsKilled = FALSE, bRet = FALSE;
//hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
//if (hProcessSnap == (HANDLE)-1)
//{
// printf("\nCreateToolhelp32Snapshot() failed:%d", GetLastError());
// //Sleep(1000000);
// return -1;
//}
//pe32.dwSize = sizeof(PROCESSENTRY32);
printf("\nProcessName ProcessID");
//if (Process32First(hProcessSnap, &pe32))
//{
// //char a[5];
// HANDLE hProcess;
// do
// {
// //_itoa_s(pe32.th32ProcessID, a, 10);
// //printf("\n%-20s%d", pe32.szExeFile, pe32.th32ProcessID);
// if (wcsstr(pe32.szExeFile, _T("SshCloudMonitor.exe")) || wcsstr(pe32.szExeFile, _T("SshRegister.exe")) )
// {
// ResumeThread;
// if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hProcessToken))
// {
// printf("\nOpen Current Process Token failed:%d", GetLastError());
// //Sleep(1000000);
// return -1;
// }
// //printf("\nOpen Current Process Token ok!");
// if (!SetPrivilege(hProcessToken, SE_DEBUG_NAME, TRUE))
// {
// //Sleep(1000000);
// return -1;
// }
// printf("\nSetPrivilege ok!");
// //killps(pe32.th32ProcessID);
// if ((hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID)) == NULL)
// {
// printf("\nOpen Process %d failed:%d", pe32.th32ProcessID, GetLastError());
// Sleep(1000000);
// return -1;
// }
// //printf("\nOpen Process %d ok!",id);
// if (!TerminateProcess(hProcess, 1))
// {
// printf("\nTerminateProcess failed:%d", GetLastError());
// //Sleep(1000000);
// return -1;
// }
// }
// } while (Process32Next(hProcessSnap, &pe32));
//}
//else
//{
// printf("\nProcess32Firstt() failed:%d", GetLastError());
// //Sleep(1000000);
// return -1;
//}
//CloseHandle(hProcessSnap);
Sleep(1000000);
//return 0;
/*HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (INVALID_HANDLE_VALUE == hSnapshot) {
return NULL;
}
PROCESSENTRY32 pe = { sizeof(pe) };
for (BOOL ret = Process32First(hSnapshot, &pe); ret; ret = Process32Next(hSnapshot, &pe))
{
if (wcscmp(pe.szExeFile, _T("SshCloudMonitor.exe")) == 0)
{
printf("again", GetLastError());
system("pause");
CloseHandle(hSnapshot);
return pe.th32ProcessID;
}
}
CloseHandle(hSnapshot);
return 0;*/
//HANDLE hProcessSnap = NULL;
//PROCESSENTRY32 pe32 = { 0 };
//HANDLE hProcess = NULL, hProcessToken = NULL;
//BOOL IsKilled = FALSE, bRet = FALSE;
//hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
//if (hProcessSnap == (HANDLE)-1)
//{
// printf("\nCreateToolhelp32Snapshot() failed:%d", GetLastError());
// //Sleep(1000000);
// return -1;
//}
//pe32.dwSize = sizeof(PROCESSENTRY32);
printf("\nProcessName ProcessID");
//if (Process32First(hProcessSnap, &pe32))
//{
// //char a[5];
// HANDLE hProcess;
// do
// {
//
// const int nBufSize = UNLEN + 1;
// TCHAR chBuf[nBufSize];
// DWORD dwRet = nBufSize;
//
// if (GetUserName(chBuf, &dwRet))
// {
//
//
//
//
// }
//
// } while (Process32Next(hProcessSnap, &pe32));
//}
//else
//{
// printf("\nProcess32Firstt() failed:%d", GetLastError());
// //Sleep(1000000);
// return -1;
//}
//CloseHandle(hProcessSnap);
Sleep(1000000);
//return 0;
SID_NAME_USE sUse;
WTS_PROCESS_INFO *pProInfo, *pTemp;
DWORD dwRes;
DWORD dwSize = MAX_PATH;
WCHAR wzUserName[MAX_PATH];
WCHAR wzDomainName[MAX_PATH];
if (WTSEnumerateProcesses(WTS_CURRENT_SERVER_HANDLE, 0, 1, &pProInfo, &dwRes))
{
pTemp = pProInfo;
for (DWORD i = 0; i < dwRes; i++)
{
//if (pTemp->ProcessId == dwProcess) //可以获取特定进程
{
if (LookupAccountSid(NULL, pTemp->pUserSid, wzUserName, &dwSize, wzDomainName, &dwSize, &sUse))
{
wprintf(_T("%d %d %s %s %s\r\n"), i, pTemp->ProcessId, pTemp->pProcessName, wzUserName, wzDomainName);
system("pause");
}
}
pTemp++;
}
WTSFreeMemory(pProInfo);
}
/*HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (INVALID_HANDLE_VALUE == hSnapshot) {
return NULL;
}
PROCESSENTRY32 pe = { sizeof(pe) };
for (BOOL ret = Process32First(hSnapshot, &pe); ret; ret = Process32Next(hSnapshot, &pe))
{
if (wcscmp(pe.szExeFile, _T("SshCloudMonitor.exe")) == 0)
{
printf("again", GetLastError());
system("pause");
CloseHandle(hSnapshot);
return pe.th32ProcessID;
}
}
CloseHandle(hSnapshot);
return 0;*/
}