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); }
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())); } }