C#不承认SafeTokenHandle

时间:2013-07-14 17:52:29

标签: c# windows permissions

我有C#

的编译错误
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;
using System.Security.Principal;
using System.Security.Permissions;
using System.Runtime.ConstrainedExecution;
using System.Runtime.InteropServices;
using Microsoft.Win32.SafeHandles;

[DllImport("advapi32.dll", SetLastError = true,CharSet = CharSet.Unicode)]
public static extern bool ***LogonUser***(string lpszUsername, string lpszDomain, string lpszPassword,
int dwLogonType, int dwLogonProvider, out ***SafeTokenHandle*** phToken);

在在*符号(的LogonUser和SafeTokenHandle)字。由于类型未知,我的C#编译器无法编译。 我开发了visual studio 2012,windows 64,framework 4.0。

请帮助。

2 个答案:

答案 0 :(得分:8)

SafeTokenHandle不是.Net框架的一部分。我假设你的代码与this article有些关联,所以你错过了定义:

public sealed class SafeTokenHandle : SafeHandleZeroOrMinusOneIsInvalid
{
    private SafeTokenHandle()
        : base(true)
    {
    }

    [DllImport("kernel32.dll")]
    [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
    [SuppressUnmanagedCodeSecurity]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool CloseHandle(IntPtr handle);

    protected override bool ReleaseHandle()
    {
        return CloseHandle(handle);
    }
}

答案 1 :(得分:0)

那是因为你的项目中没有定义这些结构。

从我所知道你知道的方法是:

[DllImport("advapi32.dll", SetLastError=true)]
public static extern bool LogonUser(
   string lpszUsername,
   string lpszDomain,
   string lpszPassword,
   int dwLogonType,
   int dwLogonProvider,
   out IntPtr phToken
);

here是对函数的解释