コード例 #1
0
        private SafeStructureInOutBuffer <SYMBOL_INFO> GetSymbolFromIndex(int type_index, long module_base)
        {
            SYMBOL_INFO symbol_info = new SYMBOL_INFO(SYMBOL_INFO.MAX_SYM_NAME);

            symbol_info.Index = type_index;
            int total_size = (symbol_info.MaxNameLen * 2) + symbol_info.SizeOfStruct - 2;

            using (var ret = new SafeStructureInOutBuffer <SYMBOL_INFO>(symbol_info, total_size, false)) {
                if (_sym_from_index(Handle, module_base, type_index, ret))
                {
                    return(ret.Detach());
                }
            }
            return(null);
        }
コード例 #2
0
        private NtResult <SafeStructureInOutBuffer <T> > QueryBuffer <T>(AUTHZ_CONTEXT_INFORMATION_CLASS info_class, bool throw_on_error) where T : new()
        {
            if (SecurityNativeMethods.AuthzGetInformationFromContext(_handle, info_class, 0, out int required_size, SafeHGlobalBuffer.Null))
            {
                return(NtStatus.STATUS_INVALID_PARAMETER.CreateResultFromError <SafeStructureInOutBuffer <T> >(throw_on_error));
            }

            var err = Win32Utils.GetLastWin32Error();

            if (err != Win32Error.ERROR_INSUFFICIENT_BUFFER)
            {
                return(err.CreateResultFromDosError <SafeStructureInOutBuffer <T> >(throw_on_error));
            }

            using (var buffer = new SafeStructureInOutBuffer <T>(required_size, false)) {
                return(SecurityNativeMethods.AuthzGetInformationFromContext(_handle, info_class,
                                                                            buffer.Length, out required_size, buffer).CreateWin32Result(throw_on_error, () => buffer.Detach()));
            }
        }
 private static NtResult <SafeStructureInOutBuffer <QUERY_SERVICE_CONFIG> > QueryConfig(SafeServiceHandle service, bool throw_on_error)
 {
     using (var buf = new SafeStructureInOutBuffer <QUERY_SERVICE_CONFIG>(8192, false))
     {
         return(Win32NativeMethods.QueryServiceConfig(service, buf, buf.Length,
                                                      out int required).CreateWin32Result(throw_on_error, () => buf.Detach()));
     }
 }