private static IntPtr GetSubjectInfoPointer(string path) { // target file info var signerFileInfo = new SIGNER_FILE_INFO { pwszFileName = Marshal.StringToHGlobalUni(path), cbSize = (uint)Marshal.SizeOf <SIGNER_FILE_INFO>(), hFile = IntPtr.Zero }; // subject info var signerSubjectInfo = new SIGNER_SUBJECT_INFO { cbSize = (uint)Marshal.SizeOf <SIGNER_SUBJECT_INFO>(), pdwIndex = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(uint))), dwSubjectChoice = Constants.SIGNER_SUBJECT_FILE, SubjectChoice = new SIGNER_SUBJECT_INFO.SubjectChoiceUnion { pSignerFileInfo = Marshal.AllocHGlobal(Marshal.SizeOf <SIGNER_FILE_INFO>()) } }; Marshal.StructureToPtr(Constants.DONT_CARE, signerSubjectInfo.pdwIndex, false); Marshal.StructureToPtr(signerFileInfo, signerSubjectInfo.SubjectChoice.pSignerFileInfo, false); var subjectHandle = Marshal.AllocHGlobal(Marshal.SizeOf <SIGNER_SUBJECT_INFO>()); Marshal.StructureToPtr(signerSubjectInfo, subjectHandle, false); return(subjectHandle); }
private static IntPtr CreateSignerSubjectInfo(string pathToAssembly) { SIGNER_SUBJECT_INFO info = new SIGNER_SUBJECT_INFO { cbSize = (uint)Marshal.SizeOf(typeof(SIGNER_SUBJECT_INFO)), pdwIndex = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(uint))) }; var index = 0; Marshal.StructureToPtr(index, info.pdwIndex, false); info.dwSubjectChoice = 0x1; //SIGNER_SUBJECT_FILE IntPtr assemblyFilePtr = Marshal.StringToHGlobalUni(pathToAssembly); SIGNER_FILE_INFO fileInfo = new SIGNER_FILE_INFO { cbSize = (uint)Marshal.SizeOf(typeof(SIGNER_FILE_INFO)), pwszFileName = assemblyFilePtr, hFile = IntPtr.Zero }; info.Union1 = new SIGNER_SUBJECT_INFO.SubjectChoiceUnion { pSignerFileInfo = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(SIGNER_FILE_INFO))) }; Marshal.StructureToPtr(fileInfo, info.Union1.pSignerFileInfo, false); IntPtr pSubjectInfo = Marshal.AllocHGlobal(Marshal.SizeOf(info)); Marshal.StructureToPtr(info, pSubjectInfo, false); return(pSubjectInfo); }
static IntPtr CreateSignerSubjectInfo(string pathToAssembly) { var info = new SIGNER_SUBJECT_INFO { cbSize = (uint) Marshal.SizeOf(typeof (SIGNER_SUBJECT_INFO)), pdwIndex = Marshal.AllocHGlobal(Marshal.SizeOf(typeof (uint))) }; const int index = 0; Marshal.StructureToPtr(index, info.pdwIndex, false); info.dwSubjectChoice = 0x1; //SIGNER_SUBJECT_FILE var assemblyFilePtr = Marshal.StringToHGlobalUni(pathToAssembly); var fileInfo = new SIGNER_FILE_INFO { cbSize = (uint) Marshal.SizeOf(typeof (SIGNER_FILE_INFO)), pwszFileName = assemblyFilePtr, hFile = IntPtr.Zero }; info.Union1 = new SIGNER_SUBJECT_INFO.SubjectChoiceUnion { pSignerFileInfo = Marshal.AllocHGlobal(Marshal.SizeOf(typeof (SIGNER_FILE_INFO))) }; Marshal.StructureToPtr(fileInfo, info.Union1.pSignerFileInfo, false); var pSubjectInfo = Marshal.AllocHGlobal(Marshal.SizeOf(info)); Marshal.StructureToPtr(info, pSubjectInfo, false); return pSubjectInfo; }