728x90
반응형
728x170
■ CreateProcessAsUser API 함수를 선언하는 방법을 보여준다.
▶ 예제 코드 (C#)
using System;
using System.Runtime.InteropServices;
#region 사용자로 프로세스 생성하기 - CreateProcessAsUser(tokenHandle, applicationName, commandLine, processAttributeHandle, threadAttributeHandle, inheritHandle, creationFlag, environmentHandle, currentDirectoryPath, startupInfo, processInformation)
/// <summary>
/// 사용자로 프로세스 생성하기
/// </summary>
/// <param name="tokenHandle">토큰 핸들</param>
/// <param name="applicationName">애플리케이션명</param>
/// <param name="commandLine">명령줄</param>
/// <param name="processAttributeHandle">프로세스 어트리뷰트 핸들</param>
/// <param name="threadAttributeHandle">스레드 어트리뷰트 핸들</param>
/// <param name="inheritHandle">상속 핸들</param>
/// <param name="creationFlag">생성 플래그</param>
/// <param name="environmentHandle">환경 핸들</param>
/// <param name="currentDirectoryPath">현재 디렉토리 경로</param>
/// <param name="startupInfo">시작 정보</param>
/// <param name="processInformation">프로세스 정보</param>
/// <returns>처리 결과</returns>
[DllImport("advapi32", EntryPoint = "CreateProcessAsUser", SetLastError = true, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
private static extern bool CreateProcessAsUser
(
IntPtr tokenHandle,
string applicationName,
string commandLine,
IntPtr processAttributeHandle,
IntPtr threadAttributeHandle,
bool inheritHandle,
uint creationFlag,
IntPtr environmentHandle,
string currentDirectoryPath,
ref STARTUPINFO startupInfo,
out PROCESS_INFORMATION processInformation
);
#endregion
#region 시작 정보 - STARTUPINFO
/// <summary>
/// 시작 정보
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct STARTUPINFO
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Public
#region Field
/// <summary>
/// 바이트 카운트
/// </summary>
public int ByteCount;
/// <summary>
/// 예약 문자열
/// </summary>
public string ReservedString;
/// <summary>
/// 데스크톱
/// </summary>
public string Desktop;
/// <summary>
/// 제목
/// </summary>
public string Title;
/// <summary>
/// X
/// </summary>
public uint X;
/// <summary>
/// ㅛ
/// </summary>
public uint Y;
/// <summary>
/// X 크기
/// </summary>
public uint XSize;
/// <summary>
/// Y 크기
/// </summary>
public uint YSize;
/// <summary>
/// X 카운트 (문자 단위)
/// </summary>
public uint XCountCharacter;
/// <summary>
/// Y 카운트 (문자 단위)
/// </summary>
public uint YCountCharacter;
/// <summary>
/// 채우기 어트리뷰트
/// </summary>
public uint FillAttribute;
/// <summary>
/// 플래그
/// </summary>
public uint Flag;
/// <summary>
/// 윈도우 표시
/// </summary>
public short ShowWindow;
/// <summary>
/// 예약 핸들 바이트 카운트
/// </summary>
public short ByteCountReservedHandle;
/// <summary>
/// 예약 핸들
/// </summary>
public IntPtr ReservedHandle;
/// <summary>
/// 표준 입력 핸들
/// </summary>
public IntPtr StandardInputHandle;
/// <summary>
/// 표준 출력 핸들
/// </summary>
public IntPtr StandardOutputHandle;
/// <summary>
/// 표준 에러 핸들
/// </summary>
public IntPtr StandardErrorHandle;
#endregion
}
#endregion
#region 프로세스 정보 - PROCESS_INFORMATION
/// <summary>
/// 프로세스 정보
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct PROCESS_INFORMATION
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Public
#region Field
/// <summary>
/// 프로세스 핸들
/// </summary>
public IntPtr ProcessHandle;
/// <summary>
/// 스레드 핸들
/// </summary>
public IntPtr ThreadHandle;
/// <summary>
/// 프로세스 ID
/// </summary>
public uint ProcessID;
/// <summary>
/// 스레드 ID
/// </summary>
public uint ThreadID;
#endregion
}
#endregion
728x90
반응형
그리드형(광고전용)
'C# > WIN32' 카테고리의 다른 글
[C#/WIN32] WTSEnumerateSessions API 함수 선언하기 (0) | 2021.05.11 |
---|---|
[C#/WIN32] WTSQueryUserToken API 함수 선언하기 (0) | 2021.05.11 |
[C#/WIN32] WTSGetActiveConsoleSessionId API 함수 선언하기 (0) | 2021.05.11 |
[C#/WIN32] CreateEnvironmentBlock API 함수 선언하기 (0) | 2021.05.11 |
[C#/WIN32] DuplicateTokenEx API 함수 선언하기 (0) | 2021.05.11 |
[C#/WIN32] QueryFullProcessImageName API 함수 선언하기 (0) | 2021.05.11 |
[C#/WIN32] OpenProcess API 함수 선언하기 (0) | 2021.05.11 |
[C#/WIN32] WTSFreeMemory API 함수 선언하기 (0) | 2021.05.11 |
[C#/WIN32] WTSQuerySessionInformation API 함수 선언하기 (0) | 2021.05.11 |
[C#/WIN32] ShellExecute API 함수 선언하기 (0) | 2021.04.22 |
댓글을 달아 주세요