|
|
#include "pch.h"
#define SOFTPCIVIEW L"ViewSettings"
WCHAR g_LastError[MAX_PATH];
BOOL SoftPCI_WriteDeviceListToRegistry( IN PHKEY RegKeyHandle, IN PLIST_ENTRY ListHead, IN PLIST_ENTRY CurrentEntry );
HBRUSH PASCAL SoftPCI_CreateDitheredBrush( VOID ) {
WORD graybits[] = {0x5555,0xAAAA,0x5555,0xAAAA,0x5555,0xAAAA,0x5555,0xAAAA}; HBRUSH hBrush; HBITMAP hBitmap;
if ((hBitmap = CreateBitmap(8, 8, 1, 1, graybits)) != NULL) {
hBrush = CreatePatternBrush(hBitmap); DeleteObject(hBitmap); }else{ hBrush = NULL; } return hBrush; }
VOID SoftPCI_FormatConfigBuffer( IN PWCHAR Buffer, IN PPCI_COMMON_CONFIG Config ) {
ULONG i = 0, offset; PULONG p = NULL; p = (PULONG)Config;
offset = 0;
wsprintf(Buffer + wcslen(Buffer), L"%02X: ", offset); for (i=0; i < (sizeof(PCI_COMMON_CONFIG) / sizeof(ULONG)); i++) { wsprintf(Buffer + wcslen(Buffer), L"%08X", *p);
if ((((i+1) % 4) == 0) || ((i+1) == (sizeof(PCI_COMMON_CONFIG) / sizeof(ULONG)))) { wcscat(Buffer, L"\r\n");
if (((offset+=0x10) < sizeof(PCI_COMMON_CONFIG))) { wsprintf(Buffer + wcslen(Buffer), L"%02X: ", offset); }
}else{ wsprintf(Buffer + wcslen(Buffer), L","); }
p++; } }
PWCHAR SoftPCI_GetLastError( VOID ) {
DWORD len = 0; len = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) g_LastError, MAX_PATH, NULL );
if (len) { //
// Drop the extra CR
//
g_LastError[len - 2] = 0; }else{ wcscpy(g_LastError, L"Failed to retrive LastError() info!"); }
return g_LastError;
}
VOID SoftPCI_HandleImportDevices( VOID ) { OPENFILENAME openFileName; WCHAR filePath[MAX_PATH]; WCHAR initialDir[MAX_PATH]; WCHAR importTitle[] = L"Import Devices"; BOOL result;
RtlZeroMemory(&openFileName, sizeof(OPENFILENAME));
if ((GetCurrentDirectory(MAX_PATH, initialDir)) == 0){ //
// error out
//
return; }
filePath[0] = 0;
openFileName.lStructSize = sizeof(OPENFILENAME); openFileName.hwndOwner = g_SoftPCIMainWnd; openFileName.hInstance = g_Instance; openFileName.lpstrFile = filePath; openFileName.nMaxFile = MAX_PATH; openFileName.lpstrTitle = importTitle; openFileName.lpstrInitialDir = initialDir;
openFileName.Flags = OFN_HIDEREADONLY | OFN_EXPLORER | OFN_FILEMUSTEXIST;
result = GetOpenFileName(&openFileName);
if (result) {
if (SoftPCI_BuildDeviceInstallList(filePath)){
SoftPCI_InstallScriptDevices();
}else{
SoftPCI_MessageBox(L"Error Parsing Script File!", L"%s\n", g_ScriptError ); } } }
BOOL SoftPCI_InitializeRegistry( VOID ) { HKEY key, key2; LONG cr; DWORD result; cr = RegOpenKeyEx(HKEY_LOCAL_MACHINE, CCS_SOFTPCI, 0, KEY_ALL_ACCESS, &key);
if (cr != ERROR_SUCCESS) { //
// If we failed to open our key then we need to try and create it
//
if ((RegOpenKeyEx(HKEY_LOCAL_MACHINE, CCS, 0, KEY_ALL_ACCESS, &key)) == ERROR_SUCCESS){
if ((RegCreateKeyEx(key, SOFTPCI_KEY, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &key2, &result)) == ERROR_SUCCESS) {
#if 0
if (result = REG_CREATED_NEW_KEY) { PRINTF("Key didnt exist so we created a new one!\n"); }else if (result = REG_OPENED_EXISTING_KEY) { PRINTF("Key already exists so we just opened it!\n"); }else{ PRINTF("Key Created successfully!\n"); } #endif
//
// Our key now exists
//
RegCloseKey(key2); }
}else{
//
// Failed to open CCS! Very bad!
//
return FALSE; } } RegCloseKey(key);
return TRUE; }
VOID SoftPCI_MessageBox( IN PWCHAR MessageTitle, IN PWCHAR MessageBody, ... ) {
va_list ap; WCHAR buffer[MAX_PATH];
va_start(ap, MessageBody);
_vsnwprintf(buffer, (sizeof(buffer)/sizeof(buffer[0])), MessageBody, ap); MessageBox(NULL, buffer, MessageTitle, MB_OK); }
BOOL SoftPCI_QueryWindowSettings( OUT PSOFTPCI_WNDVIEW ViewSettings ) {
BOOL result; HKEY key; LONG cr; ULONG size, regType; result = FALSE; cr = RegOpenKeyEx(HKEY_CURRENT_USER, USERMS_SOFTPCI, 0, KEY_ALL_ACCESS, &key); if (cr == ERROR_SUCCESS) { //
// Grab our window settings from the registry
//
size = sizeof(SOFTPCI_WNDVIEW); cr = RegQueryValueEx( key, SOFTPCIVIEW, NULL, ®Type, (LPBYTE)ViewSettings, &size );
if ((cr == ERROR_SUCCESS) && (regType == REG_BINARY) && (size == sizeof(SOFTPCI_WNDVIEW))) { result = TRUE; }
RegCloseKey(key);
}
return result; }
BOOL SoftPCI_SaveDeviceToRegisty( IN PPCI_DN Pdn ) { HKEY regKeyHandle; BOOL result = FALSE; LIST_ENTRY devicePathList; InitializeListHead(&devicePathList);
if ((RegOpenKeyEx(HKEY_LOCAL_MACHINE, CCS_SOFTPCI, 0, KEY_ALL_ACCESS, ®KeyHandle)) == ERROR_SUCCESS){
if (SoftPCI_GetDevicePathList(Pdn, &devicePathList)) {
result = SoftPCI_WriteDeviceListToRegistry(®KeyHandle, &devicePathList, devicePathList.Flink); }
RegCloseKey(regKeyHandle); }
return result; }
VOID SoftPCI_SaveWindowSettings( VOID ) {
HKEY key, key2; LONG cr; ULONG status; SOFTPCI_WNDVIEW wndView;
RtlZeroMemory(&wndView, sizeof(SOFTPCI_WNDVIEW)); if (!GetWindowPlacement(g_SoftPCIMainWnd, &wndView.WindowPlacement)) { return; }
wndView.PaneSplit = g_PaneSplit; cr = RegOpenKeyEx( HKEY_CURRENT_USER, USERMS_SOFTPCI, 0, KEY_ALL_ACCESS, &key ); if (cr == ERROR_SUCCESS) { cr = RegSetValueEx( key, SOFTPCIVIEW, 0, REG_BINARY, (PBYTE)&wndView, sizeof(SOFTPCI_WNDVIEW) ); RegCloseKey(key); }else{
cr = RegOpenKeyEx( HKEY_CURRENT_USER, USERMS, 0, KEY_ALL_ACCESS, &key ); if (cr == ERROR_SUCCESS){
cr = RegCreateKeyEx( key, SOFTPCI_KEY, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &key2, &status ); if (cr == ERROR_SUCCESS) { RegSetValueEx( key2, SOFTPCIVIEW, 0, REG_BINARY, (PBYTE)&wndView, sizeof(SOFTPCI_WNDVIEW) ); } RegCloseKey(key2); } RegCloseKey(key); } }
BOOL SoftPCI_WriteDeviceListToRegistry( IN PHKEY RegKeyHandle, IN PLIST_ENTRY ListHead, IN PLIST_ENTRY CurrentEntry ) { BOOL result = FALSE; LONG cr; ULONG createStatus; HKEY newKey; PPCI_DN pdn; WCHAR buffer[sizeof(L"XXXX")]; PSOFTPCI_CONFIG softConfig;
if (ListHead == CurrentEntry) { //
// We are done.
//
return TRUE; }
pdn = CONTAINING_RECORD(CurrentEntry, PCI_DN, ListEntry);
softConfig = &pdn->SoftDev->Config; wsprintf(buffer, L"%04x", pdn->Slot.AsUSHORT);
SoftPCI_Debug(SoftPciAlways, L"Saving Slot %04x to registry\n", pdn->Slot.AsUSHORT);
if ((RegCreateKeyEx(*RegKeyHandle, buffer, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &newKey, &createStatus)) == ERROR_SUCCESS) { if (createStatus = REG_CREATED_NEW_KEY) { SoftPCI_Debug(SoftPciAlways, L"Key didnt exist so we created a new one!\n"); }else if (createStatus = REG_OPENED_EXISTING_KEY) { SoftPCI_Debug(SoftPciAlways, L"Key already exists so we just opened it!\n"); }else{ SoftPCI_Debug(SoftPciAlways, L"Key Created successfully!\n"); }
cr = RegSetValueEx(newKey, L"Config", 0, REG_BINARY, (PBYTE)softConfig, sizeof(SOFTPCI_CONFIG)); if (cr != ERROR_SUCCESS) {
MessageBox(NULL, L"Failed to update Registry!", L"FAILED", MB_OK); return FALSE; }
//
// Write out anything remaining in the list
//
result = SoftPCI_WriteDeviceListToRegistry(&newKey, ListHead, CurrentEntry->Flink);
RegCloseKey(newKey);
return result; }
return result; }
|