Exemplo n.º 1
0
        private static IntPtr InitializeProcThreadAttributeList(int attributeCount)
        {
            const int reserved       = 0;
            var       size           = IntPtr.Zero;
            bool      wasInitialized = WinAPI.InitializeProcThreadAttributeList(IntPtr.Zero, attributeCount, reserved, ref size);

            if (wasInitialized || size == IntPtr.Zero)
            {
                throw new Exception(string.Format("Couldn't get the size of the attribute list for {0} attributes", attributeCount));
            }

            IntPtr lpAttributeList = Marshal.AllocHGlobal(size);

            if (lpAttributeList == IntPtr.Zero)
            {
                throw new Exception("Couldn't reserve space for a new attribute list");
            }

            wasInitialized = WinAPI.InitializeProcThreadAttributeList(lpAttributeList, attributeCount, reserved, ref size);
            if (!wasInitialized)
            {
                throw new Exception("Couldn't create new attribute list");
            }

            return(lpAttributeList);
        }