Вы можете использовать CreateProcess для вызова explorer.exe и TerminateProcess для его уничтожения. ExitProcess , как упомянуто в ответе выше, относится только к текущему процессу (то есть процессу, из которого вы вызываете ExitProcess).
Вы также можете использовать OpenProcess для доступа к процессу, который уже создан другими средствами.
OpenProcess
TerminateProcess
BOOL WINAPI TerminateProcess
(
__in HANDLE hProcess,
__in UINT uExitCode
);
CreateProcess имеет следующую подпись:
BOOL WINAPI CreateProcess(
__in_opt LPCTSTR lpApplicationName,
__inout_opt LPTSTR lpCommandLine,
__in_opt LPSECURITY_ATTRIBUTES lpProcessAttributes,
__in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes,
__in BOOL bInheritHandles,
__in DWORD dwCreationFlags,
__in_opt LPVOID lpEnvironment,
__in_opt LPCTSTR lpCurrentDirectory,
__in LPSTARTUPINFO lpStartupInfo,
__out LPPROCESS_INFORMATION lpProcessInformation
);
Обратите внимание на последний параметр, для которого вы должны передать указатель на структуру PROCESS_INFORMATION. Эта структура содержит дескриптор, идентификатор процесса и т. Д., Когда CreateProcess возвращает.
typedef struct _PROCESS_INFORMATION {
HANDLE hProcess;
HANDLE hThread;
DWORD dwProcessId;
DWORD dwThreadId;
}PROCESS_INFORMATION, *LPPROCESS_INFORMATION;
Если у вас уже есть процесс, созданный другими средствами, то информация о дескрипторе процесса и т. Д. Не будет вам доступна. В этом случае вы должны перечислить процессы и найти тот, который вас интересует. Это показано здесь, на MSDN. Перечисление всех процессов