728x90
반응형
728x170
■ WIN32 API 함수를 사용해 64비트 운영 체제 여부를 구하는 방법을 보여준다.
▶ Program.cs
using System.Runtime.InteropServices;
namespace TestProject;
/// <summary>
/// 프로그램
/// </summary>
class Program
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Import
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Private
#region 현재 프로세스 구하기 - GetCurrentProcess()
/// <summary>
/// 현재 프로세스 구하기
/// </summary>
/// <returns>현재 프로세스 핸들</returns>
[DllImport("kernel32")]
private static extern IntPtr GetCurrentProcess();
#endregion
#region 모듈 핸들 구하기 - GetModuleHandle(moduleName)
/// <summary>
/// 모듈 핸들 구하기
/// </summary>
/// <param name="moduleName">모듈명</param>
/// <returns>모듈 핸들</returns>
[DllImport("kernel32", CharSet = CharSet.Auto)]
private static extern IntPtr GetModuleHandle(string moduleName);
#endregion
#region 프로시저 주소 구하기 - GetProcAddress(moduleHandle, procedureName)
/// <summary>
/// 프로시저 주소 구하기
/// </summary>
/// <param name="moduleHandle">모듈 핸들</param>
/// <param name="procedureName">프로시저명</param>
/// <returns>프로시저 핸들</returns>
[DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr GetProcAddress(IntPtr moduleHandle, [MarshalAs(UnmanagedType.LPStr)] string procedureName);
#endregion
#region WOW 64비트 프로세스 여부 구하기 - IsWow64Process(processHandle, isWOW64Process)
/// <summary>
/// WOW 64비트 프로세스 여부 구하기
/// </summary>
/// <param name="processHandle">프로세스 핸들</param>
/// <param name="isWOW64Process">WOW 64비트 프로세스 여부</param>
/// <returns>처리 결과</returns>
[DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool IsWow64Process(IntPtr processHandle, out bool isWOW64BitProcess);
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Private
#region WIN32 메소드 존재 여부 구하기 - ExistWIN32Method(moduleName, methodName)
/// <summary>
/// WIN32 메소드 존재 여부 구하기
/// </summary>
/// <param name="moduleName">모듈명</param>
/// <param name="methodName">메소드명</param>
/// <returns>WIN32 메소드 존재 여부</returns>
private static bool ExistWIN32Method(string moduleName, string methodName)
{
IntPtr moduleHandle = GetModuleHandle(moduleName);
if(moduleHandle == IntPtr.Zero)
{
return false;
}
return (GetProcAddress(moduleHandle, methodName) != IntPtr.Zero);
}
#endregion
#region 64비트 운영 체제 여부 구하기 - Is64BitOperatingSystem()
/// <summary>
/// 64비트 운영 체제 여부 구하기
/// </summary>
/// <returns>64비트 운영 체제 여부</returns>
private static bool Is64BitOperatingSystem()
{
if(IntPtr.Size == 8)
{
return true;
}
else
{
bool flag;
return ((ExistWIN32Method("kernel32", "IsWow64Process") && IsWow64Process(GetCurrentProcess(), out flag)) && flag);
}
}
#endregion
#region 프로그램 시작하기 - Main()
/// <summary>
/// 프로그램 시작하기
/// </summary>
private static void Main()
{
Console.WriteLine($"64비트 운영 체제 여부 : {Is64BitOperatingSystem()}");
}
#endregion
}
728x90
반응형
그리드형(광고전용)
'C# > Common' 카테고리의 다른 글
[C#/COMMON/.NET6] Process 클래스 : 부모 프로세스 종료시 자식 프로세스 종료시키기 (0) | 2022.10.24 |
---|---|
[C#/COMMON/.NET6] Uri 클래스 : Host 속성을 사용해 도메인 호스트 구하기 (0) | 2022.10.23 |
[C#/COMMON] Directory 클래스 : GetAccessControl 정적 메소드를 사용해 디렉토리 쓰기 권한 체크하기 (0) | 2022.10.23 |
[C#/COMMON] Directory 클래스 : GetAccessControl 정적 메소드를 사용해 디렉토리 권한 체크하기 (0) | 2022.10.23 |
[C#/COMMON/.NET6] File 클래스 : Create 정적 메소드를 사용해 디렉토리 쓰기 가능 여부 구하기 (0) | 2022.10.23 |
[C#/COMMON/.NET6] 64비트 운영 체제 여부 구하기 (0) | 2022.10.22 |
[C#/COMMON/.NET6] 64비트 프로세스 여부/64비트 운영 체제 여부 구하기 (0) | 2022.10.21 |
[C#/COMMON] 파일 서명 기반으로 파일 MIME 타입 구하기 (0) | 2022.10.21 |
[C#/COMMON] PrincipalPermission 클래스 : Demand 메소드를 사용해 관리자 권한 요구하기 (0) | 2022.10.21 |
[C#/COMMON] WebClient 클래스 : 쿠키 컨테이너를 갖는 웹 클라이언트 사용하기 (0) | 2022.10.21 |
댓글을 달아 주세요