StrongNameSignatureVerificationEx (mscorsn)
Last changed: -213.83.72.72

.
Summary
Verify a strong name / manifest against a public key blob

C# Signature:

[DllImport("mscorsn.dll", SetLastError=true)]
[return: MarshalAs(UnmanagedType.U1)]
static extern bool StrongNameSignatureVerificationEx(
   [MarshalAs(UnmanagedType.LPWStr)] string wszFilePath,
   [MarshalAs(UnmanagedType.U1)] bool fForceVerification,
   [MarshalAs(UnmanagedType.U1)] ref bool pfWasVerified);

User-Defined Types:

None.

Notes:

This function is exported from mscorsn.dll in v1.0 and v1.1 of the .NET framework, but it will be moved to mscorwks.dll in v2.0. There is a shim in mscoree.dll which will redirect to the appropriate implementation dll, which has the same name.

Tips & Tricks:

The fForceVerification / pfWasVerified parameters can be confusion. A good blog entry to read, which explains how these work can be found here: http://blogs.msdn.com/shawnfa/archive/2004/06/07/150378.aspx

Sample Code:

// check the signature first
bool notForced = false;
bool verified = StrongNameSignatureVerificationEx(assembly, false, ref notForced);
Console.WriteLine("Verified: {0}\nForced: {1}", verified, !notForced);

// check to see if it is a Microsoft assembly
byte[] msClrToken = new byte[]    { 0xb7, 0x7a, 0x5c, 0x56, 0x19, 0x34, 0xe0, 0x89 };
byte[] msFxToken = new byte[]    { 0xb0, 0x3f, 0x5f, 0x7f, 0x11, 0xd5, 0x0a, 0x3a };
bool isMsAsm = CheckToken(assembly, msClrToken) || CheckToken(assembly, msFxToken);

if(isMsAsm && verified && notForced)
    Console.WriteLine("Microsoft signed assembly");
else if(isMsAsm && verified && !notForced)
    Console.WriteLine("Microsoft delay signed assembly");
else if(isMsAsm && !verified)
    Console.WriteLine("Microsoft assembly, modified since signing");
else
    Console.WriteLine("Not a Microsoft assembly");

Alternative Managed API:

None

Documentation
None