public static ResourceLayout LoadSettings(string path) { var ret = new ResourceLayout(); using (var ipModule = new RemoteDesktop_CSLibrary.Handle_Wrapper(LoadLibraryEx(path, IntPtr.Zero, LoadLibraryFlags.LOAD_LIBRARY_AS_DATAFILE))) { if (ipModule.Handle == IntPtr.Zero) { throw new Exception("LoadLibraryEx error " + Marshal.GetLastWin32Error()); } var ipResInfo = FindResource(ipModule.Handle, "#8", "#6");//Why 8 here? I dont know, it was the only RT_STRING type listed in the exe. 6 is RT_STRING type if (ipResInfo == IntPtr.Zero) { throw new Exception("FindResource error " + Marshal.GetLastWin32Error()); } var hResLoad = LoadResource(ipModule.Handle, ipResInfo); if (hResLoad == IntPtr.Zero) { throw new Exception("LoadResource error " + Marshal.GetLastWin32Error()); } var lpResLock = LockResource(hResLoad); if (lpResLock == IntPtr.Zero) { throw new Exception("LockResource error " + Marshal.GetLastWin32Error()); } var dwsize = SizeofResource(ipModule.Handle, ipResInfo); byte[] y = new byte[dwsize]; Marshal.Copy(lpResLock, y, 0, (int)dwsize); var splits = Split(y); int offset = 0; ret.IDS_STRINGSERVICE_NAME = splits[offset++]; ret.IDS_STRINGSERVICE_DISPLAY_NAME = splits[offset++]; ret.IDS_STRINGDEFAULTPORT = splits[offset++]; ret.IDS_STRINGDEFAULTGATEWAY = splits[offset++]; ret.IDS_STRINGDEFAULTPROXYGETSESSIONURL = splits[offset++]; ret.IDS_STRINGDISCLAIMERMESSAGE = splits[offset++]; ret.IDS_STRINGUNIQUE_ID = splits[offset++]; } return(ret); }
public static byte[] Update(string path, ResourceLayout newsettings) { var tmp = Path.GetTempPath() + Path.GetFileName(path); File.Copy(path, tmp, true); var hUpdateRes = BeginUpdateResource(tmp, false); if (hUpdateRes == IntPtr.Zero) { throw new Exception("BeginUpdateResource error " + Marshal.GetLastWin32Error()); } var ms = new MemoryStream(); ms.Write(System.Text.Encoding.Unicode.GetBytes("\0"), 0, 2); Append(ms, newsettings.IDS_STRINGSERVICE_NAME); Append(ms, newsettings.IDS_STRINGSERVICE_DISPLAY_NAME); Append(ms, newsettings.IDS_STRINGDEFAULTPORT); Append(ms, newsettings.IDS_STRINGDEFAULTGATEWAY); Append(ms, newsettings.IDS_STRINGDEFAULTPROXYGETSESSIONURL); Append(ms, newsettings.IDS_STRINGDISCLAIMERMESSAGE); Append(ms, newsettings.IDS_STRINGUNIQUE_ID); var b = ms.ToArray(); var ciInfo = new CultureInfo("en-US"); ushort uLcid = (ushort)ciInfo.LCID; if (!UpdateResource(hUpdateRes, 6, 8, uLcid, b, (uint)b.Length)) { throw new Exception("UpdateResource error " + Marshal.GetLastWin32Error()); } if (!EndUpdateResource(hUpdateRes, false)) { throw new Exception("EndUpdateResource error " + Marshal.GetLastWin32Error()); } var data = File.ReadAllBytes(tmp); File.Delete(tmp); return(data); }
public static byte[] Update(string path, ResourceLayout newsettings) { var tmp = Path.GetTempPath() + Path.GetFileName(path); File.Copy(path, tmp, true); var hUpdateRes = BeginUpdateResource(tmp, false); if (hUpdateRes == IntPtr.Zero) throw new Exception("BeginUpdateResource error " + Marshal.GetLastWin32Error()); var ms = new MemoryStream(); ms.Write(System.Text.Encoding.Unicode.GetBytes("\0"), 0, 2); Append(ms, newsettings.IDS_STRINGSERVICE_NAME); Append(ms, newsettings.IDS_STRINGSERVICE_DISPLAY_NAME); Append(ms, newsettings.IDS_STRINGDEFAULTPORT); Append(ms, newsettings.IDS_STRINGDEFAULTGATEWAY); Append(ms, newsettings.IDS_STRINGDEFAULTPROXYGETSESSIONURL); Append(ms, newsettings.IDS_STRINGDISCLAIMERMESSAGE); Append(ms, newsettings.IDS_STRINGUNIQUE_ID); var b = ms.ToArray(); var ciInfo = new CultureInfo("en-US"); ushort uLcid = (ushort)ciInfo.LCID; if (!UpdateResource(hUpdateRes, 6, 8, uLcid, b, (uint)b.Length)) throw new Exception("UpdateResource error " + Marshal.GetLastWin32Error()); if (!EndUpdateResource(hUpdateRes, false)) throw new Exception("EndUpdateResource error " + Marshal.GetLastWin32Error()); var data = File.ReadAllBytes(tmp); File.Delete(tmp); return data; }
public static ResourceLayout LoadSettings(string path) { var ret = new ResourceLayout(); using (var ipModule = new RemoteDesktop_CSLibrary.Handle_Wrapper(LoadLibraryEx(path, IntPtr.Zero, LoadLibraryFlags.LOAD_LIBRARY_AS_DATAFILE))) { if (ipModule.Handle == IntPtr.Zero) throw new Exception("LoadLibraryEx error " + Marshal.GetLastWin32Error()); var ipResInfo = FindResource(ipModule.Handle, "#8", "#6");//Why 8 here? I dont know, it was the only RT_STRING type listed in the exe. 6 is RT_STRING type if (ipResInfo == IntPtr.Zero) throw new Exception("FindResource error " + Marshal.GetLastWin32Error()); var hResLoad = LoadResource(ipModule.Handle, ipResInfo); if (hResLoad == IntPtr.Zero) throw new Exception("LoadResource error " + Marshal.GetLastWin32Error()); var lpResLock = LockResource(hResLoad); if (lpResLock == IntPtr.Zero) throw new Exception("LockResource error " + Marshal.GetLastWin32Error()); var dwsize = SizeofResource(ipModule.Handle, ipResInfo); byte[] y = new byte[dwsize]; Marshal.Copy(lpResLock, y, 0, (int)dwsize); var splits = Split(y); int offset = 0; ret.IDS_STRINGSERVICE_NAME = splits[offset++]; ret.IDS_STRINGSERVICE_DISPLAY_NAME = splits[offset++]; ret.IDS_STRINGDEFAULTPORT = splits[offset++]; ret.IDS_STRINGDEFAULTGATEWAY = splits[offset++]; ret.IDS_STRINGDEFAULTPROXYGETSESSIONURL = splits[offset++]; ret.IDS_STRINGDISCLAIMERMESSAGE = splits[offset++]; ret.IDS_STRINGUNIQUE_ID = splits[offset++]; } return ret; }