1. ホーム
  2. スクリプト・コラム
  3. DOS/BAT

システム情報、ハードウェア情報を表示するためのバットコード

2022-02-10 04:29:04

dosコマンドでシステム情報を表示、バッチ処理でハードウェア情報を表示

これは、どのように表示する必要があるかによります。

1. cmdウィンドウ表示

2. プログラムウィンドウ表示

3. テキストビュー

方法1.cmdウィンドウ表示。

[DllImport("Kernel32.dll", CharSet = CharSet.Ansi,SetLastError =true)]
public static extern void OutputDebugString(string lpOutputString); //used to Debug

[DllImport("Advapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
public static extern bool OpenProcessToken([In]IntPtr ProcessHandle, [In]uint DesiredAccess, [Out]out IntPtr TokenHandle);

[DllImport("Advapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
public static extern bool DuplicateTokenEx([In]IntPtr hExistingToken, uint dwDesiredAccess,IntPtr lpTokenAttributes, SECURITY_IMPERSONATION _LEVEL ImpersonationLevel,
             [In]TOKEN_TYPE TokenType, [Out]out IntPtr DuplicateTokenHandle);

[DllImport("Kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
public static extern uint WTSGetActiveConsoleSessionId();

[DllImport("Advapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
public static extern bool SetTokenInformation(IntPtr TokenHandle, TOKEN_INFORMATION_CLASS TokenInformationClass, IntPtr TokenInformation, uint TokenInformationLength);

[DllImport("Userenv.dll", CharSet = CharSet.Unicode, SetLastError = true)]
public static extern bool CreateEnvironmentBlock([Out]out IntPtr lpEnvironment,[In]IntPtr hToken,[In]bool bInherit);

[DllImport("Advapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
public static extern bool CreateProcessAsUserW([In]IntPtr hToken,[In][MarshalAs(UnmanagedType.LPWStr)]string lpApplicationName,[In][ MarshalAs(UnmanagedType.LPWStr)]string lpCommandLine, [In]IntPtr lpProcessAttributes, [In]IntPtr lpThreadAttributes, [In] bool bInheritHandles, [In]uint dwCreationFlags, [In]IntPtr lpEnvironment, [In][MarshalAs(UnmanagedType.LPWStr)] string lpCurrentDirectory, [Out ] IntPtr lpStartupInfo,[Out] IntPtr lpProcessInformation);



方法2.プログラムウィンドウ表示。

IntPtr pToken ;
OpenProcessToken(Process.GetCurrentProcess().Handle, Win32.TOKEN_ALL_ACCESS, out pToken) if (!Win32.OpenProcessToken(Process.GetCurrentProcess().Handle, Win32.TOKEN_ALL_ACCESS, out pToken)) //Get the current Token
{
     Win32.OutputDebugString("Open Token ERROR: " + Win32.GetLastError());
     return;
}

uint session_id = Win32.WTSGetActiveConsoleSessionId(); 

方法3.テキスト表示。

IntPtr hTokenDup = IntPtr.Zero;

If (!Win32.DuplicateTokenEx(pToken, Win32.MAXIMUM_ALLOWED, IntPtr.Zero, Win32.SECURITY_IMPERSONATION_LEVEL.SecurityIdentification, TOKEN_TYPE.TokenPrimary, out hTokenDup))
{
                   
       Win32.OutputDebugString("DuplicateTokenEx ERROR:" + Win32.GetLastError());
       return;
              
}