iNNOKENTIY21
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Код: <# .SYNOPSIS Извлечение строки из dll .DESCRIPTION Извлечение из библиотеки (dll) ресурса, строки, по её номеру .PARAMETER Library Файл библиотеки .PARAMETER Line Номер строки .OUTPUTS [string] строка извлеченная из библиотеки или ничего .NOTES Автор: iNNOKENTIY21 .EXAMPLE ExtractStringFromDLL.ps1 (Get-Item 'C:\Windows\system32\AJRouter.dll') 2 -------- Извлечение строки номер 2 из ресурса 'C:\Windows\system32\AJRouter.dll' .EXAMPLE ExtractStringFromDLL.ps1 (Get-Item ([System.Environment]::ExpandEnvironmentVariables("%WINDIR%\system32\AJRouter.dll"))) 2 -------- Извлечение строки номер 2 из ресурса 'C:\Windows\system32\AJRouter.dll', с извлечением пути из переменной "%WINDIR% .LINK https://stackoverflow.com/questions/41968416/how-to-extract-string-resource-from-dll #> param ( # Файл библиотеки (dll) [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [System.IO.FileInfo] $Library, # Номер строки [Parameter(Mandatory)] [int] $Line ) if (!('GetStringFromLibrary' -as [type])) { Add-Type -TypeDefinition @' using System; using System.Text; using System.Runtime.InteropServices; public class GetStringFromLibrary { [System.Flags] enum LoadLibraryFlags : uint { None = 0, DONT_RESOLVE_DLL_REFERENCES = 0x00000001, LOAD_IGNORE_CODE_AUTHZ_LEVEL = 0x00000010, LOAD_LIBRARY_AS_DATAFILE = 0x00000002, LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE = 0x00000040, LOAD_LIBRARY_AS_IMAGE_RESOURCE = 0x00000020, LOAD_LIBRARY_SEARCH_APPLICATION_DIR = 0x00000200, LOAD_LIBRARY_SEARCH_DEFAULT_DIRS = 0x00001000, LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR = 0x00000100, LOAD_LIBRARY_SEARCH_SYSTEM32 = 0x00000800, LOAD_LIBRARY_SEARCH_USER_DIRS = 0x00000400, LOAD_WITH_ALTERED_SEARCH_PATH = 0x00000008 } [DllImport("kernel32.dll", SetLastError = true)] private static extern IntPtr LoadLibraryEx( string lpFileName, IntPtr hReservedNull, LoadLibraryFlags dwFlags); [DllImport("user32.dll", CharSet = CharSet.Auto)] private static extern int LoadString( IntPtr hInstance, int ID, StringBuilder lpBuffer, int nBufferMax); [DllImport("kernel32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool FreeLibrary(IntPtr hModule); public static string ExtractStringFromDLL(string file, int number) { IntPtr lib = LoadLibraryEx( file, IntPtr.Zero, LoadLibraryFlags.LOAD_LIBRARY_AS_IMAGE_RESOURCE); StringBuilder result = new StringBuilder(2048); LoadString(lib, number, result, result.Capacity); FreeLibrary(lib); return result.ToString(); } } '@ } [GetStringFromLibrary]::ExtractStringFromDLL($Library.FullName, $Line) |
|