private AssemblyName ConstructAssemblyName(IntPtr asmMetaPtr, char[] asmNameBuf, uint asmNameLength, IntPtr pubKeyPtr, uint pubKeyBytes, uint flags) { ASSEMBLYMETADATA structure = (ASSEMBLYMETADATA)Marshal.PtrToStructure(asmMetaPtr, typeof(ASSEMBLYMETADATA)); AssemblyName assemblyName = new AssemblyName(); assemblyName.Name = new string(asmNameBuf, 0, (int)asmNameLength - 1); assemblyName.Version = new Version((int)structure.usMajorVersion, (int)structure.usMinorVersion, (int)structure.usBuildNumber, (int)structure.usRevisionNumber); string stringUni = Marshal.PtrToStringUni(structure.rpLocale); assemblyName.CultureInfo = new CultureInfo(stringUni); if (pubKeyBytes > 0U) { byte[] numArray = new byte[(int)pubKeyBytes]; Marshal.Copy(pubKeyPtr, numArray, 0, (int)pubKeyBytes); if (((int)flags & 1) != 0) { assemblyName.SetPublicKey(numArray); } else { assemblyName.SetPublicKeyToken(numArray); } } return(assemblyName); }
private void FreeAsmMeta(IntPtr asmMetaPtr) { if (asmMetaPtr != IntPtr.Zero) { ASSEMBLYMETADATA assemblymetadata = (ASSEMBLYMETADATA)Marshal.PtrToStructure(asmMetaPtr, typeof(ASSEMBLYMETADATA)); Marshal.FreeCoTaskMem(assemblymetadata.rpLocale); Marshal.DestroyStructure(asmMetaPtr, typeof(ASSEMBLYMETADATA)); Marshal.FreeCoTaskMem(asmMetaPtr); } }
private AssemblyName ConstructAssemblyName(IntPtr asmMetaPtr, char[] asmNameBuf, uint asmNameLength, IntPtr pubKeyPtr, uint pubKeyBytes, uint flags) { ASSEMBLYMETADATA assemblymetadata = (ASSEMBLYMETADATA)Marshal.PtrToStructure(asmMetaPtr, typeof(ASSEMBLYMETADATA)); AssemblyName name = new AssemblyName { Name = new string(asmNameBuf, 0, ((int)asmNameLength) - 1), Version = new Version(assemblymetadata.usMajorVersion, assemblymetadata.usMinorVersion, assemblymetadata.usBuildNumber, assemblymetadata.usRevisionNumber) }; string str = Marshal.PtrToStringUni(assemblymetadata.rpLocale); name.CultureInfo = new CultureInfo(str); if (pubKeyBytes > 0) { byte[] destination = new byte[pubKeyBytes]; Marshal.Copy(pubKeyPtr, destination, 0, (int)pubKeyBytes); if ((flags & 1) != 0) { name.SetPublicKey(destination); return(name); } name.SetPublicKeyToken(destination); } return(name); }