作成 2011.02.12
更新 2011.02.13
ASP.NET でレジストリ参照
コード
正常アクセス、セキュリティエラー、キーなし、値なしの4種類を試しています。
<%@ PAGE LANGUAGE="C#" %>
<%@ Import Namespace="Microsoft.Win32" %>
<html>
<head>
<title>get username</title>
<style>
table{border-collapse:collapse;}
tr{vertical-align:top;}
td{border:1px solid #999;
font-family:monospace;}
</style>
<script runat="server">
void Page_Load(object sender, EventArgs e)
{
  String str_result = "";
  String domain_key = "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters";
  String domain_val = "Domain";
  String dn_key = "SYSTEM\\CurrentControlSet\\Services\\NTDS\\Parameters";
  String dn_val = "Root Domain";
  String no_key = "no key";
  String no_val = "no val";
  str_result = "<tr><td>正常アクセス "+domain_val+"</td><td>";
  try
  {
    using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(domain_key)){
      str_result += (String)(rk.GetValue(domain_val,"(not found)"));
      rk.Close();
    }
  }
  catch(System.Security.SecurityException se1)
  {
    str_result += se1.Message;
  }
  catch(NullReferenceException nr1)
  {
    str_result += nr1.Message;
  }
  str_result += "</td></tr>";

  str_result += "<tr><td>アクセス拒否 "+dn_val+"</td><td>";
  try
  {
    using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(dn_key)){
      str_result += (String)(rk.GetValue(dn_val,"(not found)"));
      rk.Close();
    }
  }
  catch(System.Security.SecurityException se2) // ここを通過する
  {
    str_result += se2.Message;
  }
  catch(NullReferenceException nr2)
  {
    str_result += nr2.Message;
  }
  str_result += "</td></tr>";

  str_result += "<tr><td>キーなし "+no_key+"</td><td>";
  try
  {
    using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(no_key)){
      str_result += (String)(rk.GetValue(no_val,"(not found)"));
      rk.Close();
    }
  }
  catch(System.Security.SecurityException se3)
  {
    str_result += se3.Message;
  }
  catch(NullReferenceException nr3) // ここを通過する
  {
    str_result += nr3.Message;
  }
  str_result += "</td></tr>";

  str_result += "<tr><td>値なし "+no_val+"</td><td>";
  try
  {
    using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(domain_key)){
      str_result += (String)(rk.GetValue(no_val,"(not found)"));
      rk.Close();
    }
  }
  catch(System.Security.SecurityException se4)
  {
    str_result += se4.Message;
  }
  catch(NullReferenceException nr4)
  {
    str_result += nr4.Message;
  }
  str_result += "</td></tr>";
  lbl_result.Text = "<table>"+str_result+"</table>";
}
</script>
</head>
<body>
  <form runat="server">
  <asp:Label id="lbl_result" Text="" runat="server" />
  </form>
</body>
</html>

実行結果
正常アクセス Domain test.lan
アクセス拒否 Root Domain 要求されたレジストリ アクセスは許可されていません。
キーなし no key オブジェクト参照がオブジェクト インスタンスに設定されていません。
値なし no val (not found)
タグ: ASP.NET CSharp

©2004-2017 UPKEN IPv4