コード例 #1
0
        private static ApiSetNamespace FromCurrentProcess()
        {
            if (NtObjectUtils.SupportedVersion < SupportedVersion.Windows10)
            {
                return(new ApiSetNamespace(ApiSetFlags.None, new List <ApiSetEntry>()));
            }

            IntPtr base_ptr = NtProcess.Current.GetPeb().GetApiSetMap();
            var    header   = (API_SET_NAMESPACE_WIN10)Marshal.PtrToStructure(base_ptr, typeof(API_SET_NAMESPACE_WIN10));

            if (header.Version < 5)
            {
                return(new ApiSetNamespace(ApiSetFlags.None, new List <ApiSetEntry>()));
            }

            var map     = new SafeStructureInOutBuffer <API_SET_NAMESPACE_WIN10>(base_ptr, header.Size, false);
            var entries = map.ReadArray <API_SET_NAMESPACE_ENTRY_WIN10>(header.NamespaceOffset, header.Count).Select(e => CreateEntry(e, map));

            return(new ApiSetNamespace(header.Flags, entries.ToList()));
        }