タイトル | : Re^3: Unicode変換について |
記事No | : 1156 |
投稿日 | : 2004/11/08(Mon) 10:31 |
投稿者 | : 魔界の仮面弁士 |
> APIのNetUserGetLocalGroups関数を使用しています。 > この関数はサーバー名とユーザー名の引数をUnicodeで渡さなければならず、 > StrConv関数を使用していました。
VB6で Unicode を渡すなら、StrConv を使うのではなく、Declare側を Private Declare Sub foo Lib "dllname" (ByRef x As Byte) などのように、Byte型に対する参照で宣言しておき、 Dim B() As Byte B = "文字列" foo B(0) のように呼び出す方が良いかと。
で、VB.NETの場合は、宣言時に Auto / Unicode / ANSI にて文字列の扱いを明示できるので、 Private Declare Unicode Sub foo Lib "dllname" (ByVal x As String) のように、Unicode修飾子を指定しておけば、 Dim S As String = "文字列" foo(S) といった感じで、String型をそのまま渡す事が可能かと思います。
> それともほかにこのAPI関数を使わずに、Administrator権限を判定できる方法があるのでしょうか?
これで良いのかな…。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If Array.IndexOf(GetRoles(), "BUILTIN\Administrators") >= 0 Then MessageBox.Show("管理者権限があります。") Else MessageBox.Show("Administratorsグループのメンバではありません。") End If End Sub
Private Function GetRoles() As String() Return GetRoles(System.Security.Principal.WindowsIdentity.GetCurrent()) End Function
Private Function GetRoles(ByVal winIdentity As System.Security.Principal.WindowsIdentity) As String() Return DirectCast(winIdentity.GetType().InvokeMember("_GetRoles", Reflection.BindingFlags.Static Or Reflection.BindingFlags.InvokeMethod Or Reflection.BindingFlags.NonPublic, Nothing, winIdentity, New Object() {winIdentity.Token}, Nothing), String()) End Function
|