Пример #1
0
        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);
        }
Пример #3
0
        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;
        }