첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
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
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요