Added basic functionality to query package information.
This commit is contained in:
@@ -15,7 +15,7 @@
|
|||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
<DebugType>full</DebugType>
|
<DebugType>full</DebugType>
|
||||||
<Optimize>true</Optimize>
|
<Optimize>false</Optimize>
|
||||||
<OutputPath>bin\Debug\</OutputPath>
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
@@ -55,6 +55,7 @@
|
|||||||
<Compile Include="Contexts\ContextQueryAttrib.cs" />
|
<Compile Include="Contexts\ContextQueryAttrib.cs" />
|
||||||
<Compile Include="Contexts\ImpersonationHandle.cs" />
|
<Compile Include="Contexts\ImpersonationHandle.cs" />
|
||||||
<Compile Include="Contexts\SafeContextHandle.cs" />
|
<Compile Include="Contexts\SafeContextHandle.cs" />
|
||||||
|
<Compile Include="SecPkgInfo.cs" />
|
||||||
<Compile Include="Contexts\ServerContext.cs" />
|
<Compile Include="Contexts\ServerContext.cs" />
|
||||||
<Compile Include="Credentials\ClientCredential.cs" />
|
<Compile Include="Credentials\ClientCredential.cs" />
|
||||||
<Compile Include="Credentials\Credential.cs" />
|
<Compile Include="Credentials\Credential.cs" />
|
||||||
@@ -67,6 +68,7 @@
|
|||||||
<Compile Include="Credentials\SafeCredentialHandle.cs" />
|
<Compile Include="Credentials\SafeCredentialHandle.cs" />
|
||||||
<Compile Include="Credentials\ServerCredential.cs" />
|
<Compile Include="Credentials\ServerCredential.cs" />
|
||||||
<Compile Include="NativeMethods.cs" />
|
<Compile Include="NativeMethods.cs" />
|
||||||
|
<Compile Include="PackageSupport.cs" />
|
||||||
<Compile Include="PackageNames.cs" />
|
<Compile Include="PackageNames.cs" />
|
||||||
<Compile Include="Program.cs" />
|
<Compile Include="Program.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
|||||||
@@ -29,5 +29,9 @@ namespace NSspi
|
|||||||
[DllImport( "Secur32.dll", EntryPoint = "FreeContextBuffer", CharSet = CharSet.Unicode )]
|
[DllImport( "Secur32.dll", EntryPoint = "FreeContextBuffer", CharSet = CharSet.Unicode )]
|
||||||
public static extern SecurityStatus FreeContextBuffer( IntPtr buffer );
|
public static extern SecurityStatus FreeContextBuffer( IntPtr buffer );
|
||||||
|
|
||||||
|
|
||||||
|
[ReliabilityContract( Consistency.WillNotCorruptState, Cer.Success )]
|
||||||
|
[DllImport( "Secur32.dll", EntryPoint = "QuerySecurityPackageInfo", CharSet = CharSet.Unicode )]
|
||||||
|
internal static extern SecurityStatus QuerySecurityPackageInfo( string packageName, ref IntPtr pkgInof );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
42
PackageSupport.cs
Normal file
42
PackageSupport.cs
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace NSspi
|
||||||
|
{
|
||||||
|
public static class PackageSupport
|
||||||
|
{
|
||||||
|
public static SecPkgInfo GetPackageCapabilities( string packageName )
|
||||||
|
{
|
||||||
|
SecPkgInfo info;
|
||||||
|
SecurityStatus status;
|
||||||
|
SecurityStatus freeStatus;
|
||||||
|
|
||||||
|
IntPtr rawInfoPtr;
|
||||||
|
|
||||||
|
rawInfoPtr = new IntPtr();
|
||||||
|
info = new SecPkgInfo();
|
||||||
|
|
||||||
|
RuntimeHelpers.PrepareConstrainedRegions();
|
||||||
|
try
|
||||||
|
{ }
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
status = NativeMethods.QuerySecurityPackageInfo( packageName, ref rawInfoPtr );
|
||||||
|
|
||||||
|
if( status == SecurityStatus.OK && rawInfoPtr != IntPtr.Zero )
|
||||||
|
{
|
||||||
|
Marshal.PtrToStructure( rawInfoPtr, info );
|
||||||
|
freeStatus = NativeMethods.FreeContextBuffer( rawInfoPtr );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
18
Program.cs
18
Program.cs
@@ -16,7 +16,9 @@ namespace NSspi
|
|||||||
{
|
{
|
||||||
public static void Main( string[] args )
|
public static void Main( string[] args )
|
||||||
{
|
{
|
||||||
CredTest();
|
SecPkgInfo pkgInfo = PackageSupport.GetPackageCapabilities( "Negotiate" );
|
||||||
|
|
||||||
|
//CredTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void IdentTest()
|
private static void IdentTest()
|
||||||
@@ -63,7 +65,9 @@ namespace NSspi
|
|||||||
ContextAttrib.InitIdentify |
|
ContextAttrib.InitIdentify |
|
||||||
ContextAttrib.Confidentiality |
|
ContextAttrib.Confidentiality |
|
||||||
ContextAttrib.ReplayDetect |
|
ContextAttrib.ReplayDetect |
|
||||||
ContextAttrib.SequenceDetect
|
ContextAttrib.SequenceDetect |
|
||||||
|
ContextAttrib.Connection |
|
||||||
|
ContextAttrib.Delegate
|
||||||
);
|
);
|
||||||
|
|
||||||
serverCred = new ServerCredential( SecurityPackage.Negotiate );
|
serverCred = new ServerCredential( SecurityPackage.Negotiate );
|
||||||
@@ -74,7 +78,9 @@ namespace NSspi
|
|||||||
ContextAttrib.AcceptIdentify |
|
ContextAttrib.AcceptIdentify |
|
||||||
ContextAttrib.Confidentiality |
|
ContextAttrib.Confidentiality |
|
||||||
ContextAttrib.ReplayDetect |
|
ContextAttrib.ReplayDetect |
|
||||||
ContextAttrib.SequenceDetect
|
ContextAttrib.SequenceDetect |
|
||||||
|
ContextAttrib.Connection |
|
||||||
|
ContextAttrib.Delegate
|
||||||
);
|
);
|
||||||
|
|
||||||
clientToken = null;
|
clientToken = null;
|
||||||
@@ -135,6 +141,12 @@ namespace NSspi
|
|||||||
throw new Exception();
|
throw new Exception();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
using( server.ImpersonateClient() )
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
Console.Out.Flush();
|
Console.Out.Flush();
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
|||||||
75
SecPkgInfo.cs
Normal file
75
SecPkgInfo.cs
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace NSspi
|
||||||
|
{
|
||||||
|
[StructLayout( LayoutKind.Sequential )]
|
||||||
|
public class SecPkgInfo
|
||||||
|
{
|
||||||
|
public SecPkgCapability Capabilities;
|
||||||
|
|
||||||
|
public short Version;
|
||||||
|
|
||||||
|
public short RpcId;
|
||||||
|
|
||||||
|
public int MaxTokenLength;
|
||||||
|
|
||||||
|
[MarshalAs( UnmanagedType.LPWStr )]
|
||||||
|
public string Name;
|
||||||
|
|
||||||
|
[MarshalAs( UnmanagedType.LPWStr )]
|
||||||
|
public string Comment;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Flags]
|
||||||
|
public enum SecPkgCapability : uint
|
||||||
|
{
|
||||||
|
Integrity = 0x1,
|
||||||
|
|
||||||
|
Privacy = 0x2,
|
||||||
|
|
||||||
|
TokenOnly = 0x4,
|
||||||
|
|
||||||
|
Datagram = 0x8,
|
||||||
|
|
||||||
|
Connection = 0x10,
|
||||||
|
|
||||||
|
MultiLeg = 0x20,
|
||||||
|
|
||||||
|
ClientOnly = 0x40,
|
||||||
|
|
||||||
|
ExtendedError = 0x80,
|
||||||
|
|
||||||
|
Impersonation = 0x100,
|
||||||
|
|
||||||
|
AcceptWin32Name = 0x200,
|
||||||
|
|
||||||
|
Stream = 0x400,
|
||||||
|
|
||||||
|
Negotiable = 0x800,
|
||||||
|
|
||||||
|
GssCompatible = 0x1000,
|
||||||
|
|
||||||
|
Logon = 0x2000,
|
||||||
|
|
||||||
|
AsciiBuffers = 0x4000,
|
||||||
|
|
||||||
|
Fragment = 0x8000,
|
||||||
|
|
||||||
|
MutualAuth = 0x10000,
|
||||||
|
|
||||||
|
Delegation = 0x20000,
|
||||||
|
|
||||||
|
ReadOnlyChecksum = 0x40000,
|
||||||
|
|
||||||
|
RestrictedTokens = 0x80000,
|
||||||
|
|
||||||
|
ExtendsNego = 0x00100000,
|
||||||
|
|
||||||
|
Negotiable2 = 0x00200000,
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user