4

我有一个 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);

In the word at the * sign (LogonUser and SafeTokenHandle). 由于类型未知,我的 C# 编译器无法编译。我使用 Visual Studio 2012、Windows 64、Framework 4.0 进行开发。

请帮忙。

4

2 回答 2

10

SafeTokenHandle不是 .Net 框架的一部分。我假设您的代码与本文有些相关,因此您缺少定义:

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);
    }
}
于 2013-07-14T18:18:19.320 回答
0

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

据我所知,您需要的方法是:

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

是函数的解释

于 2013-07-14T18:15:25.053 回答