WinRing0 RC1

主な修正点

サンプルプログラム C++ 版について

  • デバイスドライバがインストールされている場合は、UAC による権限昇格を求めないように変更しました。この変更により、OpenLibSys Driver Manager でデバイスドライバをインストールしてしまえば、いちいち権限昇格をすることなく WinRing0 のすべての機能が使用できます。
  • ちなみに、OpenLibSys Driver Manager はデバイスドライバのインストール&アンインストールを行うため、管理者権限が必須となります。

正式版リリースまであと一歩。一応、デジタル署名が取得でき次第正式版に格上げする予定です。(本当に取得できるんだろうか・・・という不安も少しはありますが)

◇ダウンロード:WinRing0 RC1 

 ちなみに、UAC 対策コードは以下のような感じです。ShellExcute に “runas” を渡すのがポイントで、こうすることによって権限昇格用のダイアログが出るようになります。ただし、Windows 2000/NT4 は対応していないようなので、XP 以降のみ当該処理を行うようにしています。


BOOL COlsSampleDlg::ForceLoadDriver()
{
  OSVERSIONINFO osvi;
  osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
  ::GetVersionEx(&osvi);

  if(osvi.dwMajorVersion >= 6
  ||(osvi.dwMajorVersion == 5 && osvi.dwMinorVersion >= 1))
  {
    int count;
    BOOL FlagShellExecute = TRUE;
    TCHAR** cmd = ::CommandLineToArgvW(
                               ::GetCommandLine(), &count);

    if(count >= 2 && _tcscmp(cmd[1], _T("runas")) == 0)
    {
      FlagShellExecute = FALSE;
    }

    if(GetDllStatus() != OLS_DLL_NO_ERROR)
    {
      if(FlagShellExecute)
      {
        TCHAR path[MAX_PATH];
        ::GetModuleFileName(NULL, path, MAX_PATH);
        ::ShellExecute(NULL, _T("runas"), path,
                       _T("runas"), NULL, SW_SHOWNORMAL);
        EndDialog(0);
      }
      return FALSE;
    }
  }
  return TRUE;
}

おすすめ

1件の返信

  1. 2007年9月2日

    […] WinRing0 RC1 で紹介した UAC 対策コードを改良しました。これの C# 版も書かないとなぁ・・・。 必要に応じて権限昇格というのは非常に重要な気がしてきました。 […]

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です