* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include <regedit.h>
+#include "regedit.h"
+
+#define NTOS_MODE_USER
+#include <ndk/cmtypes.h>
+
+#if defined(NT_PROCESSOR_GROUPS)
+
+typedef USHORT IRQ_DEVICE_POLICY, *PIRQ_DEVICE_POLICY;
+
+enum _IRQ_DEVICE_POLICY_USHORT {
+ IrqPolicyMachineDefault = 0,
+ IrqPolicyAllCloseProcessors = 1,
+ IrqPolicyOneCloseProcessor = 2,
+ IrqPolicyAllProcessorsInMachine = 3,
+ IrqPolicyAllProcessorsInGroup = 3,
+ IrqPolicySpecifiedProcessors = 4,
+ IrqPolicySpreadMessagesAcrossAllProcessors = 5};
+
+#else /* defined(NT_PROCESSOR_GROUPS) */
+
+typedef enum _IRQ_DEVICE_POLICY {
+ IrqPolicyMachineDefault = 0,
+ IrqPolicyAllCloseProcessors,
+ IrqPolicyOneCloseProcessor,
+ IrqPolicyAllProcessorsInMachine,
+ IrqPolicySpecifiedProcessors,
+ IrqPolicySpreadMessagesAcrossAllProcessors
+} IRQ_DEVICE_POLICY, *PIRQ_DEVICE_POLICY;
+
+#endif
+
+typedef enum _IRQ_PRIORITY {
+ IrqPriorityUndefined = 0,
+ IrqPriorityLow,
+ IrqPriorityNormal,
+ IrqPriorityHigh
+} IRQ_PRIORITY, *PIRQ_PRIORITY;
+typedef struct _IO_RESOURCE_DESCRIPTOR {
+ UCHAR Option;
+ UCHAR Type;
+ UCHAR ShareDisposition;
+ UCHAR Spare1;
+ USHORT Flags;
+ USHORT Spare2;
+ union {
+ struct {
+ ULONG Length;
+ ULONG Alignment;
+ PHYSICAL_ADDRESS MinimumAddress;
+ PHYSICAL_ADDRESS MaximumAddress;
+ } Port;
+ struct {
+ ULONG Length;
+ ULONG Alignment;
+ PHYSICAL_ADDRESS MinimumAddress;
+ PHYSICAL_ADDRESS MaximumAddress;
+ } Memory;
+ struct {
+ ULONG MinimumVector;
+ ULONG MaximumVector;
+#if defined(NT_PROCESSOR_GROUPS)
+ IRQ_DEVICE_POLICY AffinityPolicy;
+ USHORT Group;
+#else
+ IRQ_DEVICE_POLICY AffinityPolicy;
+#endif
+ IRQ_PRIORITY PriorityPolicy;
+ KAFFINITY TargetedProcessors;
+ } Interrupt;
+ struct {
+ ULONG MinimumChannel;
+ ULONG MaximumChannel;
+ } Dma;
+ struct {
+ ULONG Length;
+ ULONG Alignment;
+ PHYSICAL_ADDRESS MinimumAddress;
+ PHYSICAL_ADDRESS MaximumAddress;
+ } Generic;
+ struct {
+ ULONG Data[3];
+ } DevicePrivate;
+ struct {
+ ULONG Length;
+ ULONG MinBusNumber;
+ ULONG MaxBusNumber;
+ ULONG Reserved;
+ } BusNumber;
+ struct {
+ ULONG Priority;
+ ULONG Reserved1;
+ ULONG Reserved2;
+ } ConfigData;
+ } u;
+} IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;
+
+#define IO_RESOURCE_PREFERRED 0x01
+#define IO_RESOURCE_DEFAULT 0x02
+#define IO_RESOURCE_ALTERNATIVE 0x08
+
+typedef struct _IO_RESOURCE_LIST {
+ USHORT Version;
+ USHORT Revision;
+ ULONG Count;
+ IO_RESOURCE_DESCRIPTOR Descriptors[1];
+} IO_RESOURCE_LIST, *PIO_RESOURCE_LIST;
+
+typedef struct _IO_RESOURCE_REQUIREMENTS_LIST {
+ ULONG ListSize;
+ INTERFACE_TYPE InterfaceType;
+ ULONG BusNumber;
+ ULONG SlotNumber;
+ ULONG Reserved[3];
+ ULONG AlternativeLists;
+ IO_RESOURCE_LIST List[1];
+} IO_RESOURCE_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST;
typedef enum _EDIT_MODE
{
} EDIT_MODE;
-static const TCHAR* editValueName;
-static TCHAR* stringValueData;
+static const WCHAR* editValueName;
+static WCHAR* stringValueData;
static PVOID binValueData;
static DWORD dwordValueData;
static PCM_RESOURCE_LIST resourceValueData;
static INT fullResourceIndex = -1;
static DWORD valueDataLen;
+static PIO_RESOURCE_REQUIREMENTS_LIST requirementsValueData;
+static INT requirementsIndex = -1;
static EDIT_MODE dwordEditMode = EDIT_MODE_HEX;
void error(HWND hwnd, INT resId, ...)
{
va_list ap;
- TCHAR title[256];
- TCHAR errfmt[1024];
- TCHAR errstr[1024];
+ WCHAR title[256];
+ WCHAR errfmt[1024];
+ WCHAR errstr[1024];
HINSTANCE hInstance;
hInstance = GetModuleHandle(0);
- if (!LoadString(hInstance, IDS_ERROR, title, COUNT_OF(title)))
- _tcscpy(title, _T("Error"));
+ if (!LoadStringW(hInstance, IDS_ERROR, title, ARRAY_SIZE(title)))
+ StringCbCopyW(title, sizeof(title), L"Error");
- if (!LoadString(hInstance, resId, errfmt, COUNT_OF(errfmt)))
- _tcscpy(errfmt, _T("Unknown error string!"));
+ if (!LoadStringW(hInstance, resId, errfmt, ARRAY_SIZE(errfmt)))
+ StringCbCopyW(errfmt, sizeof(errfmt), L"Unknown error string!");
va_start(ap, resId);
- _vsntprintf(errstr, COUNT_OF(errstr), errfmt, ap);
+ _vsnwprintf(errstr, ARRAY_SIZE(errstr), errfmt, ap);
va_end(ap);
- MessageBox(hwnd, errstr, title, MB_OK | MB_ICONERROR);
+ MessageBoxW(hwnd, errstr, title, MB_OK | MB_ICONERROR);
}
static void error_code_messagebox(HWND hwnd, DWORD error_code)
{
- TCHAR title[256];
- if (!LoadString(hInst, IDS_ERROR, title, COUNT_OF(title)))
- lstrcpy(title, TEXT("Error"));
+ WCHAR title[256];
+ if (!LoadStringW(hInst, IDS_ERROR, title, ARRAY_SIZE(title)))
+ StringCbCopyW(title, sizeof(title), L"Error");
ErrorMessageBox(hwnd, title, error_code);
}
void warning(HWND hwnd, INT resId, ...)
{
va_list ap;
- TCHAR title[256];
- TCHAR errfmt[1024];
- TCHAR errstr[1024];
+ WCHAR title[256];
+ WCHAR errfmt[1024];
+ WCHAR errstr[1024];
HINSTANCE hInstance;
hInstance = GetModuleHandle(0);
- if (!LoadString(hInstance, IDS_WARNING, title, COUNT_OF(title)))
- _tcscpy(title, _T("Warning"));
+ if (!LoadStringW(hInstance, IDS_WARNING, title, ARRAY_SIZE(title)))
+ StringCbCopyW(title, sizeof(title), L"Warning");
- if (!LoadString(hInstance, resId, errfmt, COUNT_OF(errfmt)))
- _tcscpy(errfmt, _T("Unknown error string!"));
+ if (!LoadStringW(hInstance, resId, errfmt, ARRAY_SIZE(errfmt)))
+ StringCbCopyW(errfmt, sizeof(errfmt), L"Unknown error string!");
va_start(ap, resId);
- _vsntprintf(errstr, COUNT_OF(errstr), errfmt, ap);
+ StringCbVPrintfW(errstr, sizeof(errstr), errfmt, ap);
va_end(ap);
- MessageBox(hwnd, errstr, title, MB_OK | MB_ICONSTOP);
+ MessageBoxW(hwnd, errstr, title, MB_OK | MB_ICONSTOP);
}
INT_PTR CALLBACK modify_string_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
- TCHAR* valueData;
+ WCHAR* valueData;
HWND hwndValue;
int len;
switch(uMsg)
{
case WM_INITDIALOG:
- if(editValueName && _tcscmp(editValueName, _T("")))
+ if (editValueName && wcscmp(editValueName, L""))
{
- SetDlgItemText(hwndDlg, IDC_VALUE_NAME, editValueName);
+ SetDlgItemTextW(hwndDlg, IDC_VALUE_NAME, editValueName);
}
else
{
- TCHAR buffer[255];
- LoadString(hInst, IDS_DEFAULT_VALUE_NAME, buffer, sizeof(buffer)/sizeof(TCHAR));
- SetDlgItemText(hwndDlg, IDC_VALUE_NAME, buffer);
+ WCHAR buffer[255];
+ LoadStringW(hInst, IDS_DEFAULT_VALUE_NAME, buffer, ARRAY_SIZE(buffer));
+ SetDlgItemTextW(hwndDlg, IDC_VALUE_NAME, buffer);
}
- SetDlgItemText(hwndDlg, IDC_VALUE_DATA, stringValueData);
+ SetDlgItemTextW(hwndDlg, IDC_VALUE_DATA, stringValueData);
+ SendMessage(GetDlgItem(hwndDlg, IDC_VALUE_DATA), EM_SETSEL, 0, -1);
SetFocus(GetDlgItem(hwndDlg, IDC_VALUE_DATA));
return FALSE;
case WM_COMMAND:
{
if (stringValueData)
{
- if ((valueData = HeapReAlloc(GetProcessHeap(), 0, stringValueData, (len + 1) * sizeof(TCHAR))))
+ if ((valueData = HeapReAlloc(GetProcessHeap(), 0, stringValueData, (len + 1) * sizeof(WCHAR))))
{
stringValueData = valueData;
- if (!GetWindowText(hwndValue, stringValueData, len + 1))
+ if (!GetWindowTextW(hwndValue, stringValueData, len + 1))
*stringValueData = 0;
}
}
else
{
- if ((valueData = HeapAlloc(GetProcessHeap(), 0, (len + 1) * sizeof(TCHAR))))
+ if ((valueData = HeapAlloc(GetProcessHeap(), 0, (len + 1) * sizeof(WCHAR))))
{
stringValueData = valueData;
- if (!GetWindowText(hwndValue, stringValueData, len + 1))
+ if (!GetWindowTextW(hwndValue, stringValueData, len + 1))
*stringValueData = 0;
}
}
INT_PTR CALLBACK modify_multi_string_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
- TCHAR* valueData;
+ WCHAR* valueData;
HWND hwndValue;
int len;
switch(uMsg)
{
case WM_INITDIALOG:
- if(editValueName && _tcscmp(editValueName, _T("")))
+ if (editValueName && wcscmp(editValueName, L""))
{
- SetDlgItemText(hwndDlg, IDC_VALUE_NAME, editValueName);
+ SetDlgItemTextW(hwndDlg, IDC_VALUE_NAME, editValueName);
}
else
{
- TCHAR buffer[255];
- LoadString(hInst, IDS_DEFAULT_VALUE_NAME, buffer, sizeof(buffer)/sizeof(TCHAR));
- SetDlgItemText(hwndDlg, IDC_VALUE_NAME, buffer);
+ WCHAR buffer[255];
+ LoadStringW(hInst, IDS_DEFAULT_VALUE_NAME, buffer, ARRAY_SIZE(buffer));
+ SetDlgItemTextW(hwndDlg, IDC_VALUE_NAME, buffer);
}
- SetDlgItemText(hwndDlg, IDC_VALUE_DATA, stringValueData);
+ SetDlgItemTextW(hwndDlg, IDC_VALUE_DATA, stringValueData);
SetFocus(GetDlgItem(hwndDlg, IDC_VALUE_DATA));
return FALSE;
case WM_COMMAND:
{
if (stringValueData)
{
- if ((valueData = HeapReAlloc(GetProcessHeap(), 0, stringValueData, (len + 1) * sizeof(TCHAR))))
+ if ((valueData = HeapReAlloc(GetProcessHeap(), 0, stringValueData, (len + 1) * sizeof(WCHAR))))
{
stringValueData = valueData;
- if (!GetWindowText(hwndValue, stringValueData, len + 1))
+ if (!GetWindowTextW(hwndValue, stringValueData, len + 1))
*stringValueData = 0;
}
}
else
{
- if ((valueData = HeapAlloc(GetProcessHeap(), 0, (len + 1) * sizeof(TCHAR))))
+ if ((valueData = HeapAlloc(GetProcessHeap(), 0, (len + 1) * sizeof(WCHAR))))
{
stringValueData = valueData;
- if (!GetWindowText(hwndValue, stringValueData, len + 1))
+ if (!GetWindowTextW(hwndValue, stringValueData, len + 1))
*stringValueData = 0;
}
}
{
WNDPROC oldwndproc;
- oldwndproc = (WNDPROC)(LONG_PTR)GetWindowLongPtr(hwnd, GWL_USERDATA);
+ oldwndproc = (WNDPROC)GetWindowLongPtr(hwnd, GWLP_USERDATA);
switch (uMsg)
{
}
}
- return CallWindowProc(oldwndproc, hwnd, uMsg, wParam, lParam);
+ return CallWindowProcW(oldwndproc, hwnd, uMsg, wParam, lParam);
}
{
WNDPROC oldproc;
HWND hwndValue;
- TCHAR ValueString[32];
- LPTSTR Remainder;
+ WCHAR ValueString[32];
+ LPWSTR Remainder;
DWORD Base;
DWORD Value = 0;
/* subclass the edit control */
hwndValue = GetDlgItem(hwndDlg, IDC_VALUE_DATA);
- oldproc = (WNDPROC)(LONG_PTR)GetWindowLongPtr(hwndValue, GWL_WNDPROC);
- SetWindowLongPtr(hwndValue, GWL_USERDATA, (DWORD_PTR)oldproc);
- SetWindowLongPtr(hwndValue, GWL_WNDPROC, (DWORD_PTR)DwordEditSubclassProc);
+ oldproc = (WNDPROC)GetWindowLongPtr(hwndValue, GWLP_WNDPROC);
+ SetWindowLongPtr(hwndValue, GWLP_USERDATA, (DWORD_PTR)oldproc);
+ SetWindowLongPtr(hwndValue, GWLP_WNDPROC, (DWORD_PTR)DwordEditSubclassProc);
- if(editValueName && _tcscmp(editValueName, _T("")))
+ if (editValueName && wcscmp(editValueName, L""))
{
- SetDlgItemText(hwndDlg, IDC_VALUE_NAME, editValueName);
+ SetDlgItemTextW(hwndDlg, IDC_VALUE_NAME, editValueName);
}
else
{
- TCHAR buffer[255];
- LoadString(hInst, IDS_DEFAULT_VALUE_NAME, buffer, sizeof(buffer)/sizeof(TCHAR));
- SetDlgItemText(hwndDlg, IDC_VALUE_NAME, buffer);
+ WCHAR buffer[255];
+ LoadStringW(hInst, IDS_DEFAULT_VALUE_NAME, buffer, ARRAY_SIZE(buffer));
+ SetDlgItemTextW(hwndDlg, IDC_VALUE_NAME, buffer);
}
CheckRadioButton (hwndDlg, IDC_FORMAT_HEX, IDC_FORMAT_DEC, IDC_FORMAT_HEX);
- _stprintf (ValueString, _T("%lx"), dwordValueData);
- SetDlgItemText(hwndDlg, IDC_VALUE_DATA, ValueString);
+ StringCbPrintfW(ValueString, sizeof(ValueString), L"%lx", dwordValueData);
+ SetDlgItemTextW(hwndDlg, IDC_VALUE_DATA, ValueString);
+ SendMessage(GetDlgItem(hwndDlg, IDC_VALUE_DATA), EM_SETSEL, 0, -1);
SetFocus(GetDlgItem(hwndDlg, IDC_VALUE_DATA));
return FALSE;
{
if (GetWindowTextLength(hwndValue))
{
- if (GetWindowText(hwndValue, ValueString, 32))
+ if (GetWindowTextW(hwndValue, ValueString, 32))
{
- Value = _tcstoul (ValueString, &Remainder, 10);
+ Value = wcstoul (ValueString, &Remainder, 10);
}
}
}
- _stprintf (ValueString, _T("%lx"), Value);
- SetDlgItemText(hwndDlg, IDC_VALUE_DATA, ValueString);
+ StringCbPrintfW(ValueString, sizeof(ValueString), L"%lx", Value);
+ SetDlgItemTextW(hwndDlg, IDC_VALUE_DATA, ValueString);
return TRUE;
}
break;
{
if (GetWindowTextLength(hwndValue))
{
- if (GetWindowText(hwndValue, ValueString, 32))
+ if (GetWindowTextW(hwndValue, ValueString, 32))
{
- Value = _tcstoul (ValueString, &Remainder, 16);
+ Value = wcstoul (ValueString, &Remainder, 16);
}
}
}
- _stprintf (ValueString, _T("%lu"), Value);
- SetDlgItemText(hwndDlg, IDC_VALUE_DATA, ValueString);
+ StringCbPrintfW(ValueString, sizeof(ValueString), L"%lu", Value);
+ SetDlgItemTextW(hwndDlg, IDC_VALUE_DATA, ValueString);
return TRUE;
}
break;
{
if (GetWindowTextLength(hwndValue))
{
- if (!GetWindowText(hwndValue, ValueString, 32))
+ if (!GetWindowTextW(hwndValue, ValueString, 32))
{
EndDialog(hwndDlg, IDCANCEL);
return TRUE;
}
Base = (dwordEditMode == EDIT_MODE_HEX) ? 16 : 10;
- dwordValueData = _tcstoul (ValueString, &Remainder, Base);
+ dwordValueData = wcstoul (ValueString, &Remainder, Base);
}
else
{
switch(uMsg)
{
case WM_INITDIALOG:
- if(editValueName && _tcscmp(editValueName, _T("")))
+ if (editValueName && wcscmp(editValueName, L""))
{
- SetDlgItemText(hwndDlg, IDC_VALUE_NAME, editValueName);
+ SetDlgItemTextW(hwndDlg, IDC_VALUE_NAME, editValueName);
}
else
{
- TCHAR buffer[255];
- LoadString(hInst, IDS_DEFAULT_VALUE_NAME, buffer, sizeof(buffer)/sizeof(TCHAR));
- SetDlgItemText(hwndDlg, IDC_VALUE_NAME, buffer);
+ WCHAR buffer[255];
+ LoadStringW(hInst, IDS_DEFAULT_VALUE_NAME, buffer, ARRAY_SIZE(buffer));
+ SetDlgItemTextW(hwndDlg, IDC_VALUE_NAME, buffer);
}
hwndValue = GetDlgItem(hwndDlg, IDC_VALUE_DATA);
HexEdit_LoadBuffer(hwndValue, binValueData, valueDataLen);
/* reset the hex edit control's font */
- SendMessage(hwndValue, WM_SETFONT, 0, 0);
+ SendMessageW(hwndValue, WM_SETFONT, 0, 0);
SetFocus(hwndValue);
return FALSE;
case WM_COMMAND:
static BOOL CreateResourceColumns(HWND hwnd)
{
- TCHAR szText[80];
+ WCHAR szText[80];
RECT rc;
- LV_COLUMN lvC;
+ LVCOLUMN lvC;
HWND hwndLV;
INT width;
/* Load the column labels from the resource file. */
lvC.iSubItem = 0;
lvC.cx = (rc.right - rc.left) / 2;
- LoadString(hInst, IDS_DMA_CHANNEL, szText, sizeof(szText)/sizeof(TCHAR));
+ LoadStringW(hInst, IDS_DMA_CHANNEL, szText, ARRAY_SIZE(szText));
if (ListView_InsertColumn(hwndLV, 0, &lvC) == -1)
return FALSE;
lvC.iSubItem = 1;
lvC.cx = (rc.right - rc.left) - lvC.cx;
- LoadString(hInst, IDS_DMA_PORT, szText, sizeof(szText)/sizeof(TCHAR));
+ LoadStringW(hInst, IDS_DMA_PORT, szText, ARRAY_SIZE(szText));
if (ListView_InsertColumn(hwndLV, 1, &lvC) == -1)
return FALSE;
/* Load the column labels from the resource file. */
lvC.iSubItem = 0;
lvC.cx = width;
- LoadString(hInst, IDS_INTERRUPT_VECTOR, szText, sizeof(szText)/sizeof(TCHAR));
+ LoadStringW(hInst, IDS_INTERRUPT_VECTOR, szText, ARRAY_SIZE(szText));
if (ListView_InsertColumn(hwndLV, 0, &lvC) == -1)
return FALSE;
lvC.iSubItem = 1;
- LoadString(hInst, IDS_INTERRUPT_LEVEL, szText, sizeof(szText)/sizeof(TCHAR));
+ LoadStringW(hInst, IDS_INTERRUPT_LEVEL, szText, ARRAY_SIZE(szText));
if (ListView_InsertColumn(hwndLV, 1, &lvC) == -1)
return FALSE;
lvC.iSubItem = 2;
- LoadString(hInst, IDS_INTERRUPT_AFFINITY, szText, sizeof(szText)/sizeof(TCHAR));
+ LoadStringW(hInst, IDS_INTERRUPT_AFFINITY, szText, ARRAY_SIZE(szText));
if (ListView_InsertColumn(hwndLV, 2, &lvC) == -1)
return FALSE;
lvC.iSubItem = 3;
lvC.cx = (rc.right - rc.left) - 3 * width;
- LoadString(hInst, IDS_INTERRUPT_TYPE, szText, sizeof(szText)/sizeof(TCHAR));
+ LoadStringW(hInst, IDS_INTERRUPT_TYPE, szText, ARRAY_SIZE(szText));
if (ListView_InsertColumn(hwndLV, 3, &lvC) == -1)
return FALSE;
/* Load the column labels from the resource file. */
lvC.iSubItem = 0;
lvC.cx = width;
- LoadString(hInst, IDS_MEMORY_ADDRESS, szText, sizeof(szText)/sizeof(TCHAR));
+ LoadStringW(hInst, IDS_MEMORY_ADDRESS, szText, ARRAY_SIZE(szText));
if (ListView_InsertColumn(hwndLV, 0, &lvC) == -1)
return FALSE;
lvC.iSubItem = 1;
- LoadString(hInst, IDS_MEMORY_LENGTH, szText, sizeof(szText)/sizeof(TCHAR));
+ LoadStringW(hInst, IDS_MEMORY_LENGTH, szText, ARRAY_SIZE(szText));
if (ListView_InsertColumn(hwndLV, 1, &lvC) == -1)
return FALSE;
lvC.iSubItem = 2;
lvC.cx = (rc.right - rc.left) - 2 * width;
- LoadString(hInst, IDS_MEMORY_ACCESS, szText, sizeof(szText)/sizeof(TCHAR));
+ LoadStringW(hInst, IDS_MEMORY_ACCESS, szText, ARRAY_SIZE(szText));
if (ListView_InsertColumn(hwndLV, 2, &lvC) == -1)
return FALSE;
/* Load the column labels from the resource file. */
lvC.iSubItem = 0;
lvC.cx = width;
- LoadString(hInst, IDS_PORT_ADDRESS, szText, sizeof(szText)/sizeof(TCHAR));
+ LoadStringW(hInst, IDS_PORT_ADDRESS, szText, ARRAY_SIZE(szText));
if (ListView_InsertColumn(hwndLV, 0, &lvC) == -1)
return FALSE;
lvC.iSubItem = 1;
- LoadString(hInst, IDS_PORT_LENGTH, szText, sizeof(szText)/sizeof(TCHAR));
+ LoadStringW(hInst, IDS_PORT_LENGTH, szText, ARRAY_SIZE(szText));
if (ListView_InsertColumn(hwndLV, 1, &lvC) == -1)
return FALSE;
lvC.iSubItem = 2;
lvC.cx = (rc.right - rc.left) - 2 * width;
- LoadString(hInst, IDS_PORT_ACCESS, szText, sizeof(szText)/sizeof(TCHAR));
+ LoadStringW(hInst, IDS_PORT_ACCESS, szText, ARRAY_SIZE(szText));
if (ListView_InsertColumn(hwndLV, 2, &lvC) == -1)
return FALSE;
/* Load the column labels from the resource file. */
lvC.iSubItem = 0;
lvC.cx = width;
- LoadString(hInst, IDS_SPECIFIC_RESERVED1, szText, sizeof(szText)/sizeof(TCHAR));
+ LoadStringW(hInst, IDS_SPECIFIC_RESERVED1, szText, ARRAY_SIZE(szText));
if (ListView_InsertColumn(hwndLV, 0, &lvC) == -1)
return FALSE;
lvC.iSubItem = 1;
- LoadString(hInst, IDS_SPECIFIC_RESERVED2, szText, sizeof(szText)/sizeof(TCHAR));
+ LoadStringW(hInst, IDS_SPECIFIC_RESERVED2, szText, ARRAY_SIZE(szText));
if (ListView_InsertColumn(hwndLV, 1, &lvC) == -1)
return FALSE;
lvC.iSubItem = 2;
lvC.cx = (rc.right - rc.left) - 2 * width;
- LoadString(hInst, IDS_SPECIFIC_DATASIZE, szText, sizeof(szText)/sizeof(TCHAR));
+ LoadStringW(hInst, IDS_SPECIFIC_DATASIZE, szText, ARRAY_SIZE(szText));
if (ListView_InsertColumn(hwndLV, 2, &lvC) == -1)
return FALSE;
static VOID
GetInterfaceType(INTERFACE_TYPE InterfaceType,
- LPTSTR pBuffer,
+ LPWSTR pBuffer,
DWORD dwLength)
{
-// LPTSTR lpInterfaceType;
+// LPWSTR lpInterfaceType;
switch (InterfaceType)
{
case InterfaceTypeUndefined:
- LoadString(hInst, IDS_BUS_UNDEFINED, pBuffer, dwLength);
-// lpInterfaceType = _T("Undefined");
+ LoadStringW(hInst, IDS_BUS_UNDEFINED, pBuffer, dwLength);
+// lpInterfaceType = L"Undefined";
break;
case Internal:
- LoadString(hInst, IDS_BUS_INTERNAL, pBuffer, dwLength);
-// lpInterfaceType = _T("Internal");
+ LoadStringW(hInst, IDS_BUS_INTERNAL, pBuffer, dwLength);
+// lpInterfaceType = L"Internal";
break;
case Isa:
- LoadString(hInst, IDS_BUS_ISA, pBuffer, dwLength);
-// lpInterfaceType = _T("Isa");
+ LoadStringW(hInst, IDS_BUS_ISA, pBuffer, dwLength);
+// lpInterfaceType = L"Isa";
break;
case Eisa:
- LoadString(hInst, IDS_BUS_EISA, pBuffer, dwLength);
-// lpInterfaceType = _T("Eisa");
+ LoadStringW(hInst, IDS_BUS_EISA, pBuffer, dwLength);
+// lpInterfaceType = L"Eisa";
break;
case MicroChannel:
- LoadString(hInst, IDS_BUS_MICROCHANNEL, pBuffer, dwLength);
-// lpInterfaceType = _T("MicroChannel");
+ LoadStringW(hInst, IDS_BUS_MICROCHANNEL, pBuffer, dwLength);
+// lpInterfaceType = L"MicroChannel";
break;
case TurboChannel:
- LoadString(hInst, IDS_BUS_TURBOCHANNEL, pBuffer, dwLength);
-// lpInterfaceType = _T("TurboChannel");
+ LoadStringW(hInst, IDS_BUS_TURBOCHANNEL, pBuffer, dwLength);
+// lpInterfaceType = L"TurboChannel";
break;
case PCIBus:
- LoadString(hInst, IDS_BUS_PCIBUS, pBuffer, dwLength);
-// lpInterfaceType = _T("PCIBus");
+ LoadStringW(hInst, IDS_BUS_PCIBUS, pBuffer, dwLength);
+// lpInterfaceType = L"PCIBus";
break;
case VMEBus:
- LoadString(hInst, IDS_BUS_VMEBUS, pBuffer, dwLength);
-// lpInterfaceType = _T("VMEBus");
+ LoadStringW(hInst, IDS_BUS_VMEBUS, pBuffer, dwLength);
+// lpInterfaceType = L"VMEBus";
break;
case NuBus:
- LoadString(hInst, IDS_BUS_NUBUS, pBuffer, dwLength);
-// lpInterfaceType = _T("NuBus");
+ LoadStringW(hInst, IDS_BUS_NUBUS, pBuffer, dwLength);
+// lpInterfaceType = L"NuBus";
break;
case PCMCIABus:
- LoadString(hInst, IDS_BUS_PCMCIABUS, pBuffer, dwLength);
-// lpInterfaceType = _T("PCMCIABus");
+ LoadStringW(hInst, IDS_BUS_PCMCIABUS, pBuffer, dwLength);
+// lpInterfaceType = L"PCMCIABus";
break;
case CBus:
- LoadString(hInst, IDS_BUS_CBUS, pBuffer, dwLength);
-// lpInterfaceType = _T("CBus");
+ LoadStringW(hInst, IDS_BUS_CBUS, pBuffer, dwLength);
+// lpInterfaceType = L"CBus";
break;
case MPIBus:
- LoadString(hInst, IDS_BUS_MPIBUS, pBuffer, dwLength);
-// lpInterfaceType = _T("MPIBus");
+ LoadStringW(hInst, IDS_BUS_MPIBUS, pBuffer, dwLength);
+// lpInterfaceType = L"MPIBus";
break;
case MPSABus:
- LoadString(hInst, IDS_BUS_MPSABUS, pBuffer, dwLength);
-// lpInterfaceType = _T("MPSABus");
+ LoadStringW(hInst, IDS_BUS_MPSABUS, pBuffer, dwLength);
+// lpInterfaceType = L"MPSABus";
break;
case ProcessorInternal:
- LoadString(hInst, IDS_BUS_PROCESSORINTERNAL, pBuffer, dwLength);
-// lpInterfaceType = _T("ProcessorInternal");
+ LoadStringW(hInst, IDS_BUS_PROCESSORINTERNAL, pBuffer, dwLength);
+// lpInterfaceType = L"ProcessorInternal";
break;
case InternalPowerBus:
- LoadString(hInst, IDS_BUS_INTERNALPOWERBUS, pBuffer, dwLength);
-// lpInterfaceType = _T("InternalPowerBus");
+ LoadStringW(hInst, IDS_BUS_INTERNALPOWERBUS, pBuffer, dwLength);
+// lpInterfaceType = L"InternalPowerBus";
break;
case PNPISABus:
- LoadString(hInst, IDS_BUS_PNPISABUS, pBuffer, dwLength);
-// lpInterfaceType = _T("PNPISABus");
+ LoadStringW(hInst, IDS_BUS_PNPISABUS, pBuffer, dwLength);
+// lpInterfaceType = L"PNPISABus";
break;
case PNPBus:
- LoadString(hInst, IDS_BUS_PNPBUS, pBuffer, dwLength);
-// lpInterfaceType = _T("PNPBus");
+ LoadStringW(hInst, IDS_BUS_PNPBUS, pBuffer, dwLength);
+// lpInterfaceType = L"PNPBus";
break;
default:
- LoadString(hInst, IDS_BUS_UNKNOWNTYPE, pBuffer, dwLength);
-// lpInterfaceType = _T("Unknown interface type");
+ LoadStringW(hInst, IDS_BUS_UNKNOWNTYPE, pBuffer, dwLength);
+// lpInterfaceType = L"Unknown interface type";
break;
}
-// _tcscpy(pBuffer, lpInterfaceType);
+// wcscpy(pBuffer, lpInterfaceType);
}
ULONG i;
HWND hwndLV;
- TCHAR buffer[80];
- LVITEM item;
+ WCHAR buffer[80];
+ LVITEMW item;
INT iItem;
- pFullDescriptor = &resourceValueData->List[fullResourceIndex];
+ pFullDescriptor = &resourceValueData->List[0];
+ for (i = 0; i < fullResourceIndex; i++)
+ {
+ pFullDescriptor = (PVOID)(pFullDescriptor->PartialResourceList.PartialDescriptors +
+ pFullDescriptor->PartialResourceList.Count);
+ }
pPartialResourceList = &pFullDescriptor->PartialResourceList;
/* Interface type */
GetInterfaceType(pFullDescriptor->InterfaceType, buffer, 80);
- SetDlgItemText(hwnd, IDC_INTERFACETYPE, buffer);
+ SetDlgItemTextW(hwnd, IDC_INTERFACETYPE, buffer);
/* Busnumber */
- SetDlgItemInt(hwnd, IDC_BUSNUMBER, (UINT)pFullDescriptor->BusNumber, FALSE);
+ SetDlgItemInt(hwnd, IDC_BUSNUMBER, (UINT)pFullDescriptor->BusNumber, TRUE);
/* Version */
SetDlgItemInt(hwnd, IDC_VERSION, (UINT)pPartialResourceList->Version, FALSE);
hwndLV = GetDlgItem(hwnd, IDC_PORT_LIST);
#ifdef _M_AMD64
- wsprintf(buffer, _T("0x%16I64x"), pDescriptor->u.Port.Start.QuadPart);
+ wsprintf(buffer, L"0x%016I64x", pDescriptor->u.Port.Start.QuadPart);
#else
- wsprintf(buffer, _T("0x%08lx"), pDescriptor->u.Port.Start.u.LowPart);
+ wsprintf(buffer, L"0x%08lx", pDescriptor->u.Port.Start.u.LowPart);
#endif
item.mask = LVIF_TEXT | LVIF_PARAM;
item.state = 0;
item.stateMask = 0;
item.pszText = buffer;
- item.cchTextMax = (int)_tcslen(item.pszText);
+ item.cchTextMax = (int)wcslen(item.pszText);
item.lParam = (LPARAM)pDescriptor;
iItem = ListView_InsertItem(hwndLV, &item);
if (iItem != -1)
{
- wsprintf(buffer, _T("0x%lx"), pDescriptor->u.Port.Length);
+ wsprintf(buffer, L"0x%lx", pDescriptor->u.Port.Length);
ListView_SetItemText(hwndLV, iItem, 1, buffer);
if (pDescriptor->Flags & CM_RESOURCE_PORT_IO)
- LoadString(hInst, IDS_PORT_PORT_IO, buffer, sizeof(buffer)/sizeof(TCHAR));
+ LoadStringW(hInst, IDS_PORT_PORT_IO, buffer, ARRAY_SIZE(buffer));
else
- LoadString(hInst, IDS_PORT_MEMORY_IO, buffer, sizeof(buffer)/sizeof(TCHAR));
+ LoadStringW(hInst, IDS_PORT_MEMORY_IO, buffer, ARRAY_SIZE(buffer));
ListView_SetItemText(hwndLV, iItem, 2, buffer);
}
break;
case CmResourceTypeInterrupt:
hwndLV = GetDlgItem(hwnd, IDC_IRQ_LIST);
- wsprintf(buffer, _T("%lu"), pDescriptor->u.Interrupt.Vector);
+ wsprintf(buffer, L"%lu", pDescriptor->u.Interrupt.Vector);
item.mask = LVIF_TEXT | LVIF_PARAM;
item.iItem = 1000;
item.state = 0;
item.stateMask = 0;
item.pszText = buffer;
- item.cchTextMax = (int)_tcslen(item.pszText);
+ item.cchTextMax = (int)wcslen(item.pszText);
item.lParam = (LPARAM)pDescriptor;
iItem = ListView_InsertItem(hwndLV, &item);
if (iItem != -1)
{
- wsprintf(buffer, _T("%lu"), pDescriptor->u.Interrupt.Level);
+ wsprintf(buffer, L"%lu", pDescriptor->u.Interrupt.Level);
ListView_SetItemText(hwndLV, iItem, 1, buffer);
- wsprintf(buffer, _T("0x%08lx"), pDescriptor->u.Interrupt.Affinity);
+ wsprintf(buffer, L"0x%08lx", pDescriptor->u.Interrupt.Affinity);
ListView_SetItemText(hwndLV, iItem, 2, buffer);
if (pDescriptor->Flags & CM_RESOURCE_INTERRUPT_LATCHED)
- LoadString(hInst, IDS_INTERRUPT_EDGE_SENSITIVE, buffer, sizeof(buffer)/sizeof(TCHAR));
+ LoadStringW(hInst, IDS_INTERRUPT_EDGE_SENSITIVE, buffer, ARRAY_SIZE(buffer));
else
- LoadString(hInst, IDS_INTERRUPT_LEVEL_SENSITIVE, buffer, sizeof(buffer)/sizeof(TCHAR));
+ LoadStringW(hInst, IDS_INTERRUPT_LEVEL_SENSITIVE, buffer, ARRAY_SIZE(buffer));
ListView_SetItemText(hwndLV, iItem, 3, buffer);
}
hwndLV = GetDlgItem(hwnd, IDC_MEMORY_LIST);
#ifdef _M_AMD64
- wsprintf(buffer, _T("0x%16I64x"), pDescriptor->u.Memory.Start.QuadPart);
+ wsprintf(buffer, L"0x%016I64x", pDescriptor->u.Memory.Start.QuadPart);
#else
- wsprintf(buffer, _T("0x%08lx"), pDescriptor->u.Memory.Start.u.LowPart);
+ wsprintf(buffer, L"0x%08lx", pDescriptor->u.Memory.Start.u.LowPart);
#endif
item.mask = LVIF_TEXT | LVIF_PARAM;
item.state = 0;
item.stateMask = 0;
item.pszText = buffer;
- item.cchTextMax = (int)_tcslen(item.pszText);
+ item.cchTextMax = (int)wcslen(item.pszText);
item.lParam = (LPARAM)pDescriptor;
iItem = ListView_InsertItem(hwndLV, &item);
if (iItem != -1)
{
- wsprintf(buffer, _T("0x%lx"), pDescriptor->u.Memory.Length);
+ wsprintf(buffer, L"0x%lx", pDescriptor->u.Memory.Length);
ListView_SetItemText(hwndLV, iItem, 1, buffer);
switch (pDescriptor->Flags & (CM_RESOURCE_MEMORY_READ_ONLY | CM_RESOURCE_MEMORY_WRITE_ONLY))
{
case CM_RESOURCE_MEMORY_READ_ONLY:
- LoadString(hInst, IDS_MEMORY_READ_ONLY, buffer, sizeof(buffer)/sizeof(TCHAR));
+ LoadStringW(hInst, IDS_MEMORY_READ_ONLY, buffer, ARRAY_SIZE(buffer));
break;
case CM_RESOURCE_MEMORY_WRITE_ONLY:
- LoadString(hInst, IDS_MEMORY_WRITE_ONLY, buffer, sizeof(buffer)/sizeof(TCHAR));
+ LoadStringW(hInst, IDS_MEMORY_WRITE_ONLY, buffer, ARRAY_SIZE(buffer));
break;
default:
- LoadString(hInst, IDS_MEMORY_READ_WRITE, buffer, sizeof(buffer)/sizeof(TCHAR));
+ LoadStringW(hInst, IDS_MEMORY_READ_WRITE, buffer, ARRAY_SIZE(buffer));
break;
}
case CmResourceTypeDma:
hwndLV = GetDlgItem(hwnd, IDC_DMA_LIST);
- wsprintf(buffer, _T("%lu"), pDescriptor->u.Dma.Channel);
+ wsprintf(buffer, L"%lu", pDescriptor->u.Dma.Channel);
item.mask = LVIF_TEXT | LVIF_PARAM;
item.iItem = 1000;
item.state = 0;
item.stateMask = 0;
item.pszText = buffer;
- item.cchTextMax = (int)_tcslen(item.pszText);
+ item.cchTextMax = (int)wcslen(item.pszText);
item.lParam = (LPARAM)pDescriptor;
iItem = ListView_InsertItem(hwndLV, &item);
if (iItem != -1)
{
- wsprintf(buffer, _T("%lu"), pDescriptor->u.Dma.Port);
+ wsprintf(buffer, L"%lu", pDescriptor->u.Dma.Port);
ListView_SetItemText(hwndLV, iItem, 1, buffer);
}
break;
case CmResourceTypeDeviceSpecific:
hwndLV = GetDlgItem(hwnd, IDC_DEVICE_LIST);
- wsprintf(buffer, _T("0x%08lx"), pDescriptor->u.DeviceSpecificData.Reserved1);
+ wsprintf(buffer, L"0x%08lx", pDescriptor->u.DeviceSpecificData.Reserved1);
item.mask = LVIF_TEXT | LVIF_PARAM;
item.iItem = 1000;
item.state = 0;
item.stateMask = 0;
item.pszText = buffer;
- item.cchTextMax = (int)_tcslen(item.pszText);
+ item.cchTextMax = (int)wcslen(item.pszText);
item.lParam = (LPARAM)pDescriptor;
iItem = ListView_InsertItem(hwndLV, &item);
if (iItem != -1)
{
- wsprintf(buffer, _T("0x%08lx"), pDescriptor->u.DeviceSpecificData.Reserved2);
+ wsprintf(buffer, L"0x%08lx", pDescriptor->u.DeviceSpecificData.Reserved2);
ListView_SetItemText(hwndLV, iItem, 1, buffer);
- wsprintf(buffer, _T("0x%lx"), pDescriptor->u.DeviceSpecificData.DataSize);
+ wsprintf(buffer, L"0x%lx", pDescriptor->u.DeviceSpecificData.DataSize);
ListView_SetItemText(hwndLV, iItem, 2, buffer);
}
break;
if (lpnmlv->iItem != -1)
{
PCM_PARTIAL_RESOURCE_DESCRIPTOR pDescriptor;
- LVITEM item;
+ LVITEMW item;
item.mask = LVIF_PARAM;
item.iItem = lpnmlv->iItem;
static BOOL CreateResourceListColumns(HWND hWndListView)
{
- TCHAR szText[80];
+ WCHAR szText[80];
RECT rc;
- LV_COLUMN lvC;
+ LVCOLUMN lvC;
ListView_SetExtendedListViewStyle(hWndListView, LVS_EX_FULLROWSELECT);
/* Load the column labels from the resource file. */
lvC.iSubItem = 0;
lvC.cx = (rc.right - rc.left) / 2;
- LoadString(hInst, IDS_BUSNUMBER, szText, sizeof(szText)/sizeof(TCHAR));
+ LoadStringW(hInst, IDS_BUSNUMBER, szText, ARRAY_SIZE(szText));
if (ListView_InsertColumn(hWndListView, 0, &lvC) == -1)
return FALSE;
lvC.iSubItem = 1;
lvC.cx = (rc.right - rc.left) - lvC.cx;
- LoadString(hInst, IDS_INTERFACE, szText, sizeof(szText)/sizeof(TCHAR));
+ LoadStringW(hInst, IDS_INTERFACE, szText, ARRAY_SIZE(szText));
if (ListView_InsertColumn(hWndListView, 1, &lvC) == -1)
return FALSE;
static VOID AddFullResourcesToList(HWND hwnd)
{
PCM_FULL_RESOURCE_DESCRIPTOR pFullDescriptor;
- TCHAR buffer[80];
- LVITEM item;
+ WCHAR buffer[80];
+ LVITEMW item;
ULONG i;
INT iItem;
+ pFullDescriptor = &resourceValueData->List[0];
for (i = 0; i < resourceValueData->Count; i++)
{
- pFullDescriptor = &resourceValueData->List[i];
-
- wsprintf(buffer, _T("%lu"), pFullDescriptor->BusNumber);
+ wsprintf(buffer, L"%lu", pFullDescriptor->BusNumber);
item.mask = LVIF_TEXT;
item.iItem = i;
item.state = 0;
item.stateMask = 0;
item.pszText = buffer;
- item.cchTextMax = (int)_tcslen(item.pszText);
+ item.cchTextMax = (int)wcslen(item.pszText);
iItem = ListView_InsertItem(hwnd, &item);
if (iItem != -1)
GetInterfaceType(pFullDescriptor->InterfaceType, buffer, 80);
ListView_SetItemText(hwnd, iItem, 1, buffer);
}
+ pFullDescriptor = (PVOID)(pFullDescriptor->PartialResourceList.PartialDescriptors +
+ pFullDescriptor->PartialResourceList.Count);
}
}
if (lpnmlv->iItem != -1)
{
fullResourceIndex = lpnmlv->iItem;
- DialogBox(0, MAKEINTRESOURCE(IDD_EDIT_RESOURCE), hwndDlg, modify_resource_dlgproc);
+ DialogBoxW(0, MAKEINTRESOURCEW(IDD_EDIT_RESOURCE), hwndDlg, modify_resource_dlgproc);
}
break;
}
{
case IDC_SHOW_RESOURCE:
if (fullResourceIndex != -1)
- DialogBox(0, MAKEINTRESOURCE(IDD_EDIT_RESOURCE), hwndDlg, modify_resource_dlgproc);
+ DialogBoxW(0, MAKEINTRESOURCEW(IDD_EDIT_RESOURCE), hwndDlg, modify_resource_dlgproc);
break;
case IDOK:
EndDialog(hwndDlg, IDOK);
return FALSE;
}
+static BOOL
+CreateRequirementsListColumns(HWND hWndListView)
+{
+ WCHAR szText[80];
+ RECT rc;
+ LVCOLUMN lvC;
-BOOL ModifyValue(HWND hwnd, HKEY hKey, LPCTSTR valueName, BOOL EditBin)
+ ListView_SetExtendedListViewStyle(hWndListView, LVS_EX_FULLROWSELECT);
+
+ GetClientRect(hWndListView, &rc);
+
+ /* Create columns. */
+ lvC.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
+ lvC.pszText = szText;
+ lvC.fmt = LVCFMT_LEFT;
+
+ /* Load the column labels from the resource file. */
+ lvC.iSubItem = 0;
+ lvC.cx = (rc.right - rc.left) / 4;
+ LoadStringW(hInst, IDS_REQALTERNATIVELIST, szText, ARRAY_SIZE(szText));
+ if (ListView_InsertColumn(hWndListView, 0, &lvC) == -1)
+ return FALSE;
+
+ lvC.iSubItem = 1;
+ lvC.cx = (rc.right - rc.left) / 4;
+ LoadStringW(hInst, IDS_REQRESOURCELIST, szText, ARRAY_SIZE(szText));
+ if (ListView_InsertColumn(hWndListView, 1, &lvC) == -1)
+ return FALSE;
+
+ lvC.iSubItem = 2;
+ lvC.cx = (rc.right - rc.left) / 4;
+ LoadStringW(hInst, IDS_REQDESCRIPTOR, szText, ARRAY_SIZE(szText));
+ if (ListView_InsertColumn(hWndListView, 2, &lvC) == -1)
+ return FALSE;
+
+ lvC.iSubItem = 3;
+ lvC.cx = (rc.right - rc.left) - (3 * ((rc.right - rc.left) / 4));
+ LoadStringW(hInst, IDS_REQDEVICETYPE, szText, ARRAY_SIZE(szText));
+ if (ListView_InsertColumn(hWndListView, 3, &lvC) == -1)
+ return FALSE;
+
+ return TRUE;
+}
+
+static VOID
+GetResourceType(UCHAR ResourceType,
+ LPWSTR pBuffer,
+ DWORD dwLength)
+{
+ switch (ResourceType)
+ {
+ case CmResourceTypePort:
+ LoadStringW(hInst, IDS_TYPE_PORT, pBuffer, dwLength);
+ break;
+
+ case CmResourceTypeInterrupt:
+ LoadStringW(hInst, IDS_TYPE_INTERRUPT, pBuffer, dwLength);
+ break;
+
+ case CmResourceTypeMemory:
+ LoadStringW(hInst, IDS_TYPE_MEMORY, pBuffer, dwLength);
+ break;
+
+ case CmResourceTypeDma:
+ LoadStringW(hInst, IDS_TYPE_DMA, pBuffer, dwLength);
+ break;
+
+ default:
+ wsprintf(pBuffer, L"Unknown %u", ResourceType);
+ break;
+ }
+}
+
+static VOID
+GetShareDisposition(
+ UCHAR ShareDisposition,
+ LPWSTR pBuffer,
+ DWORD dwLength)
+{
+ switch (ShareDisposition)
+ {
+ case CmResourceShareUndetermined:
+ LoadStringW(hInst, IDS_SHARE_UNDETERMINED, pBuffer, dwLength);
+ break;
+
+ case CmResourceShareDeviceExclusive:
+ LoadStringW(hInst, IDS_SHARE_DEVICE_EXCLUSIVE, pBuffer, dwLength);
+ break;
+
+ case CmResourceShareDriverExclusive:
+ LoadStringW(hInst, IDS_SHARE_DRIVER_EXCLUSIVE, pBuffer, dwLength);
+ break;
+
+ case CmResourceShareShared:
+ LoadStringW(hInst, IDS_SHARE_SHARED, pBuffer, dwLength);
+ break;
+ }
+}
+
+static VOID
+GetPortType(
+ USHORT Flags,
+ LPWSTR pBuffer,
+ DWORD dwLength)
+{
+ if ((Flags & CM_RESOURCE_PORT_IO) == CM_RESOURCE_PORT_IO)
+ {
+ LoadStringW(hInst, IDS_PORT_PORT_IO, pBuffer, dwLength);
+ }
+ else if ((Flags & CM_RESOURCE_PORT_IO) == CM_RESOURCE_PORT_MEMORY)
+ {
+ LoadStringW(hInst, IDS_PORT_MEMORY_IO, pBuffer, dwLength);
+ }
+}
+
+static VOID
+GetMemoryAccess(
+ USHORT Flags,
+ LPWSTR pBuffer,
+ DWORD dwLength)
+{
+ if ((Flags & (CM_RESOURCE_MEMORY_READ_ONLY | CM_RESOURCE_MEMORY_WRITE_ONLY)) == CM_RESOURCE_MEMORY_READ_WRITE)
+ {
+ LoadStringW(hInst, IDS_MEMORY_READ_WRITE, pBuffer, dwLength);
+ }
+ else if ((Flags & (CM_RESOURCE_MEMORY_READ_ONLY | CM_RESOURCE_MEMORY_WRITE_ONLY)) == CM_RESOURCE_MEMORY_READ_ONLY)
+ {
+ LoadStringW(hInst, IDS_MEMORY_READ_ONLY, pBuffer, dwLength);
+ }
+ else if ((Flags & (CM_RESOURCE_MEMORY_READ_ONLY | CM_RESOURCE_MEMORY_WRITE_ONLY)) == CM_RESOURCE_MEMORY_WRITE_ONLY)
+ {
+ LoadStringW(hInst, IDS_MEMORY_WRITE_ONLY, pBuffer, dwLength);
+ }
+}
+
+static VOID
+GetInterruptType(
+ USHORT Flags,
+ LPWSTR pBuffer,
+ DWORD dwLength)
+{
+ if ((Flags & CM_RESOURCE_INTERRUPT_LEVEL_LATCHED_BITS) == CM_RESOURCE_INTERRUPT_LATCHED)
+ {
+ LoadStringW(hInst, IDS_INTERRUPT_EDGE_SENSITIVE, pBuffer, dwLength);
+ }
+ else
+ {
+ LoadStringW(hInst, IDS_INTERRUPT_LEVEL_SENSITIVE, pBuffer, dwLength);
+ }
+}
+
+static VOID
+AddRequirementsToList(HWND hwndDlg, HWND hwnd)
+{
+ PIO_RESOURCE_LIST pResourceList;
+ PIO_RESOURCE_DESCRIPTOR pDescriptor;
+ WCHAR buffer[80];
+ LVITEMW item;
+ ULONG i, j, index;
+ INT iItem;
+
+ index = 0;
+ pResourceList = &requirementsValueData->List[0];
+ for (i = 0; i < requirementsValueData->AlternativeLists; i++)
+ {
+ for (j = 0; j < pResourceList->Count; j++)
+ {
+ pDescriptor = &pResourceList->Descriptors[j];
+
+ wsprintf(buffer, L"%lu", i + 1);
+
+ item.mask = LVIF_TEXT | LVIF_PARAM;
+ item.iItem = index;
+ item.iSubItem = 0;
+ item.state = 0;
+ item.stateMask = 0;
+ item.pszText = buffer;
+ item.cchTextMax = (int)wcslen(item.pszText);
+ item.lParam = (LPARAM)pDescriptor;
+
+ iItem = ListView_InsertItem(hwnd, &item);
+ if (iItem != -1)
+ {
+ wsprintf(buffer, L"%lu", j + 1);
+ ListView_SetItemText(hwnd, iItem, 1, buffer);
+ wsprintf(buffer, L"%lu", 1);
+ ListView_SetItemText(hwnd, iItem, 2, buffer);
+
+ GetResourceType(pDescriptor->Type, buffer, 80);
+ ListView_SetItemText(hwnd, iItem, 3, buffer);
+ }
+
+ index++;
+ }
+
+
+ pResourceList = (PIO_RESOURCE_LIST)(pResourceList->Descriptors + pResourceList->Count);
+ }
+
+ GetInterfaceType(requirementsValueData->InterfaceType, buffer, 80);
+ SetDlgItemTextW(hwndDlg, IDC_REQINTERFACETYPE, buffer);
+ SetDlgItemInt(hwndDlg, IDC_REQBUSNUMBER, (UINT)requirementsValueData->BusNumber, TRUE);
+ SetDlgItemInt(hwndDlg, IDC_REQSLOTNUMBER, (UINT)requirementsValueData->SlotNumber, FALSE);
+}
+
+static INT_PTR CALLBACK show_requirements_port_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ PIO_RESOURCE_DESCRIPTOR pDescriptor;
+ WCHAR Buffer[80];
+
+ switch(uMsg)
+ {
+ case WM_INITDIALOG:
+ pDescriptor = (PIO_RESOURCE_DESCRIPTOR)lParam;
+
+ GetPortType(pDescriptor->Flags, Buffer, 80);
+ SetDlgItemTextW(hwndDlg, IDC_REQ_PORT_TYPE, Buffer);
+
+ wsprintf(Buffer, L"0x%lx", pDescriptor->u.Port.Length);
+ SetDlgItemTextW(hwndDlg, IDC_REQ_PORT_LENGTH, Buffer);
+ wsprintf(Buffer, L"0x%lx", pDescriptor->u.Port.Alignment);
+ SetDlgItemTextW(hwndDlg, IDC_REQ_PORT_ALIGN, Buffer);
+#ifdef _M_AMD64
+ wsprintf(Buffer, L"0x%016I64x", pDescriptor->u.Port.MinimumAddress.QuadPart);
+#else
+ wsprintf(Buffer, L"0x%08lx", pDescriptor->u.Port.MinimumAddress.u.LowPart);
+#endif
+ SetDlgItemTextW(hwndDlg, IDC_REQ_PORT_MIN, Buffer);
+#ifdef _M_AMD64
+ wsprintf(Buffer, L"0x%016I64x", pDescriptor->u.Port.MaximumAddress.QuadPart);
+#else
+ wsprintf(Buffer, L"0x%08lx", pDescriptor->u.Port.MaximumAddress.u.LowPart);
+#endif
+ SetDlgItemTextW(hwndDlg, IDC_REQ_PORT_MAX, Buffer);
+
+ GetShareDisposition(pDescriptor->ShareDisposition, Buffer, 80);
+ SetDlgItemTextW(hwndDlg, IDC_REQ_PORT_SHARE, Buffer);
+
+ EnableWindow(GetDlgItem(hwndDlg, IDC_REQ_PORT_ALTERNATIVE), (pDescriptor->Option & IO_RESOURCE_ALTERNATIVE));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_REQ_PORT_PREFERRED), (pDescriptor->Option & IO_RESOURCE_PREFERRED));
+ return FALSE;
+
+ case WM_COMMAND:
+ switch (LOWORD(wParam))
+ {
+ case IDOK:
+ case IDCANCEL:
+ EndDialog(hwndDlg, IDOK);
+ break;
+ }
+ }
+ return FALSE;
+}
+
+static INT_PTR CALLBACK show_requirements_memory_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ PIO_RESOURCE_DESCRIPTOR pDescriptor;
+ WCHAR Buffer[80];
+
+ switch(uMsg)
+ {
+ case WM_INITDIALOG:
+ pDescriptor = (PIO_RESOURCE_DESCRIPTOR)lParam;
+
+ GetMemoryAccess(pDescriptor->Flags, Buffer, 80);
+ SetDlgItemTextW(hwndDlg, IDC_REQ_MEMORY_ACCESS, Buffer);
+
+ wsprintf(Buffer, L"0x%lx", pDescriptor->u.Memory.Length);
+ SetDlgItemTextW(hwndDlg, IDC_REQ_MEMORY_LENGTH, Buffer);
+ wsprintf(Buffer, L"0x%lx", pDescriptor->u.Memory.Alignment);
+ SetDlgItemTextW(hwndDlg, IDC_REQ_MEMORY_ALIGN, Buffer);
+#ifdef _M_AMD64
+ wsprintf(Buffer, L"0x%016I64x", pDescriptor->u.Memory.MinimumAddress.QuadPart);
+#else
+ wsprintf(Buffer, L"0x%08lx", pDescriptor->u.Memory.MinimumAddress.u.LowPart);
+#endif
+ SetDlgItemTextW(hwndDlg, IDC_REQ_MEMORY_MIN, Buffer);
+#ifdef _M_AMD64
+ wsprintf(Buffer, L"0x%016I64x", pDescriptor->u.Memory.MaximumAddress.QuadPart);
+#else
+ wsprintf(Buffer, L"0x%08lx", pDescriptor->u.Memory.MaximumAddress.u.LowPart);
+#endif
+ SetDlgItemTextW(hwndDlg, IDC_REQ_MEMORY_MAX, Buffer);
+
+ GetShareDisposition(pDescriptor->ShareDisposition, Buffer, 80);
+ SetDlgItemTextW(hwndDlg, IDC_REQ_MEMORY_SHARE, Buffer);
+
+ EnableWindow(GetDlgItem(hwndDlg, IDC_REQ_MEMORY_ALTERNATIVE), (pDescriptor->Option & IO_RESOURCE_ALTERNATIVE));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_REQ_MEMORY_PREFERRED), (pDescriptor->Option & IO_RESOURCE_PREFERRED));
+ return FALSE;
+
+ case WM_COMMAND:
+ switch (LOWORD(wParam))
+ {
+ case IDOK:
+ case IDCANCEL:
+ EndDialog(hwndDlg, IDOK);
+ break;
+ }
+ }
+ return FALSE;
+}
+
+static INT_PTR CALLBACK show_requirements_interrupt_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ PIO_RESOURCE_DESCRIPTOR pDescriptor;
+ WCHAR Buffer[80];
+
+ switch(uMsg)
+ {
+ case WM_INITDIALOG:
+ pDescriptor = (PIO_RESOURCE_DESCRIPTOR)lParam;
+
+ GetInterruptType(pDescriptor->Flags, Buffer, 80);
+ SetDlgItemTextW(hwndDlg, IDC_REQ_INT_TYPE, Buffer);
+
+ wsprintf(Buffer, L"0x%lx", pDescriptor->u.Interrupt.MinimumVector);
+ SetDlgItemTextW(hwndDlg, IDC_REQ_INT_MIN, Buffer);
+ wsprintf(Buffer, L"0x%lx", pDescriptor->u.Interrupt.MaximumVector);
+ SetDlgItemTextW(hwndDlg, IDC_REQ_INT_MAX, Buffer);
+
+ GetShareDisposition(pDescriptor->ShareDisposition, Buffer, 80);
+ SetDlgItemTextW(hwndDlg, IDC_REQ_INT_SHARE, Buffer);
+
+ EnableWindow(GetDlgItem(hwndDlg, IDC_REQ_INT_ALTERNATIVE), (pDescriptor->Option & IO_RESOURCE_ALTERNATIVE));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_REQ_INT_PREFERRED), (pDescriptor->Option & IO_RESOURCE_PREFERRED));
+ return FALSE;
+
+ case WM_COMMAND:
+ switch (LOWORD(wParam))
+ {
+ case IDOK:
+ case IDCANCEL:
+ EndDialog(hwndDlg, IDOK);
+ break;
+ }
+ }
+ return FALSE;
+}
+
+static INT_PTR CALLBACK show_requirements_dma_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ PIO_RESOURCE_DESCRIPTOR pDescriptor;
+ WCHAR Buffer[80];
+
+ switch(uMsg)
+ {
+ case WM_INITDIALOG:
+ pDescriptor = (PIO_RESOURCE_DESCRIPTOR)lParam;
+ wsprintf(Buffer, L"0x%lx", pDescriptor->u.Dma.MinimumChannel);
+ SetDlgItemTextW(hwndDlg, IDC_REQ_DMA_MIN, Buffer);
+ wsprintf(Buffer, L"0x%lx", pDescriptor->u.Dma.MaximumChannel);
+ SetDlgItemTextW(hwndDlg, IDC_REQ_DMA_MAX, Buffer);
+
+ GetShareDisposition(pDescriptor->ShareDisposition, Buffer, 80);
+ SetDlgItemTextW(hwndDlg, IDC_REQ_DMA_SHARE, Buffer);
+
+ EnableWindow(GetDlgItem(hwndDlg, IDC_REQ_DMA_ALTERNATIVE), (pDescriptor->Option & IO_RESOURCE_ALTERNATIVE));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_REQ_DMA_PREFERRED), (pDescriptor->Option & IO_RESOURCE_PREFERRED));
+ return FALSE;
+
+ case WM_COMMAND:
+ switch (LOWORD(wParam))
+ {
+ case IDOK:
+ case IDCANCEL:
+ EndDialog(hwndDlg, IDOK);
+ break;
+ }
+ }
+ return FALSE;
+}
+
+static VOID
+ShowRequirement(HWND hwndDlg)
+{
+ PIO_RESOURCE_DESCRIPTOR pDescriptor;
+ LVITEMW item;
+
+ if (requirementsIndex == -1)
+ return;
+
+ item.mask = LVIF_PARAM;
+ item.iItem = requirementsIndex;
+ item.iSubItem = 0;
+ ListView_GetItem(GetDlgItem(hwndDlg, IDC_REQUIREMENTS_LIST), &item);
+
+ pDescriptor = (PIO_RESOURCE_DESCRIPTOR)item.lParam;
+ if (pDescriptor)
+ {
+ switch (pDescriptor->Type)
+ {
+ case CmResourceTypePort:
+ DialogBoxParamW(0, MAKEINTRESOURCEW(IDD_EDIT_REQUIREMENTS_PORT), hwndDlg, show_requirements_port_dlgproc, (LPARAM)pDescriptor);
+ break;
+ case CmResourceTypeMemory:
+ DialogBoxParamW(0, MAKEINTRESOURCEW(IDD_EDIT_REQUIREMENTS_MEMORY), hwndDlg, show_requirements_memory_dlgproc, (LPARAM)pDescriptor);
+ break;
+ case CmResourceTypeInterrupt:
+ DialogBoxParamW(0, MAKEINTRESOURCEW(IDD_EDIT_REQUIREMENTS_INT), hwndDlg, show_requirements_interrupt_dlgproc, (LPARAM)pDescriptor);
+ break;
+ case CmResourceTypeDma:
+ DialogBoxParamW(0, MAKEINTRESOURCEW(IDD_EDIT_REQUIREMENTS_DMA), hwndDlg, show_requirements_dma_dlgproc, (LPARAM)pDescriptor);
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+static BOOL
+OnRequirementsListNotify(HWND hwndDlg, NMHDR *phdr)
+{
+ LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW)phdr;
+
+ switch (phdr->idFrom)
+ {
+ case IDC_REQUIREMENTS_LIST:
+ switch(phdr->code)
+ {
+ case NM_CLICK:
+ requirementsIndex = lpnmlv->iItem;
+ EnableWindow(GetDlgItem(hwndDlg, IDC_SHOW_REQUIREMENT), (lpnmlv->iItem != -1));
+ break;
+
+ case NM_DBLCLK:
+ if (lpnmlv->iItem != -1)
+ {
+ requirementsIndex = lpnmlv->iItem;
+ ShowRequirement(hwndDlg);
+ }
+ break;
+ }
+ break;
+ }
+
+ return FALSE;
+}
+
+static INT_PTR CALLBACK modify_requirements_list_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ UNREFERENCED_PARAMETER(lParam);
+
+ switch(uMsg)
+ {
+ case WM_INITDIALOG:
+ CreateRequirementsListColumns(GetDlgItem(hwndDlg, IDC_REQUIREMENTS_LIST));
+ AddRequirementsToList(hwndDlg, GetDlgItem(hwndDlg, IDC_REQUIREMENTS_LIST));
+ return FALSE;
+
+ case WM_NOTIFY:
+ return OnRequirementsListNotify(hwndDlg, (NMHDR *)lParam);
+
+ case WM_COMMAND:
+ switch (LOWORD(wParam))
+ {
+ case IDC_SHOW_REQUIREMENT:
+ if (requirementsIndex != -1)
+ ShowRequirement(hwndDlg);
+ break;
+ case IDOK:
+ EndDialog(hwndDlg, IDOK);
+ break;
+ case IDCANCEL:
+ EndDialog(hwndDlg, IDCANCEL);
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+BOOL ModifyValue(HWND hwnd, HKEY hKey, LPCWSTR valueName, BOOL EditBin)
{
DWORD type;
LONG lRet;
editValueName = valueName;
- lRet = RegQueryValueEx(hKey, valueName, 0, &type, 0, &valueDataLen);
- if (lRet != ERROR_SUCCESS && (!_tcscmp(valueName, _T("")) || valueName == NULL))
+ lRet = RegQueryValueExW(hKey, valueName, 0, &type, 0, &valueDataLen);
+ if (lRet != ERROR_SUCCESS && (valueName == NULL || !valueName[0]))
{
lRet = ERROR_SUCCESS; /* Allow editing of (Default) values which don't exist */
type = REG_SZ;
error(hwnd, IDS_TOO_BIG_VALUE, valueDataLen);
goto done;
}
- lRet = RegQueryValueEx(hKey, valueName, 0, 0, (LPBYTE)stringValueData, &valueDataLen);
+ lRet = RegQueryValueExW(hKey, valueName, 0, 0, (LPBYTE)stringValueData, &valueDataLen);
if (lRet != ERROR_SUCCESS)
{
error(hwnd, IDS_BAD_VALUE, valueName);
stringValueData = NULL;
}
- if (DialogBox(0, MAKEINTRESOURCE(IDD_EDIT_STRING), hwnd, modify_string_dlgproc) == IDOK)
+ if (DialogBoxW(0, MAKEINTRESOURCEW(IDD_EDIT_STRING), hwnd, modify_string_dlgproc) == IDOK)
{
if (stringValueData)
{
- lRet = RegSetValueEx(hKey, valueName, 0, type, (LPBYTE)stringValueData, (DWORD) (_tcslen(stringValueData) + 1) * sizeof(TCHAR));
+ lRet = RegSetValueExW(hKey, valueName, 0, type, (LPBYTE)stringValueData, (DWORD) (wcslen(stringValueData) + 1) * sizeof(WCHAR));
}
else
{
- lRet = RegSetValueEx(hKey, valueName, 0, type, NULL, 0);
+ lRet = RegSetValueExW(hKey, valueName, 0, type, NULL, 0);
}
if (lRet == ERROR_SUCCESS)
result = TRUE;
if (valueDataLen > 0)
{
size_t llen, listlen, nl_len;
- LPTSTR src, lines = NULL;
+ LPWSTR src, lines = NULL;
- if (!(stringValueData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, valueDataLen + sizeof(TCHAR))))
+ if (!(stringValueData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, valueDataLen + sizeof(WCHAR))))
{
error(hwnd, IDS_TOO_BIG_VALUE, valueDataLen);
goto done;
}
- lRet = RegQueryValueEx(hKey, valueName, 0, 0, (LPBYTE)stringValueData, &valueDataLen);
+ lRet = RegQueryValueExW(hKey, valueName, 0, 0, (LPBYTE)stringValueData, &valueDataLen);
if (lRet != ERROR_SUCCESS)
{
error(hwnd, IDS_BAD_VALUE, valueName);
/* convert \0 to \r\n */
src = stringValueData;
- nl_len = _tcslen(_T("\r\n")) * sizeof(TCHAR);
- listlen = sizeof(TCHAR);
- lines = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, listlen + sizeof(TCHAR));
- while(*src != _T('\0'))
+ nl_len = wcslen(L"\r\n") * sizeof(WCHAR);
+ listlen = sizeof(WCHAR);
+ lines = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, listlen + sizeof(WCHAR));
+ while(*src != L'\0')
{
- llen = _tcslen(src);
+ llen = wcslen(src);
if(llen == 0)
break;
- listlen += (llen * sizeof(TCHAR)) + nl_len;
+ listlen += (llen * sizeof(WCHAR)) + nl_len;
lines = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, lines, listlen);
- _tcscat(lines, src);
- _tcscat(lines, _T("\r\n"));
+ wcscat(lines, src);
+ wcscat(lines, L"\r\n");
src += llen + 1;
}
HeapFree(GetProcessHeap(), 0, stringValueData);
stringValueData = NULL;
}
- if (DialogBox(0, MAKEINTRESOURCE(IDD_EDIT_MULTI_STRING), hwnd, modify_multi_string_dlgproc) == IDOK)
+ if (DialogBoxW(0, MAKEINTRESOURCEW(IDD_EDIT_MULTI_STRING), hwnd, modify_multi_string_dlgproc) == IDOK)
{
if (stringValueData)
{
/* convert \r\n to \0 */
BOOL EmptyLines = FALSE;
- LPTSTR src, lines, nl;
+ LPWSTR src, lines, nl;
size_t linechars, buflen, c_nl, dest;
src = stringValueData;
- buflen = sizeof(TCHAR);
- lines = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, buflen + sizeof(TCHAR));
- c_nl = _tcslen(_T("\r\n"));
+ buflen = sizeof(WCHAR);
+ lines = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, buflen + sizeof(WCHAR));
+ c_nl = wcslen(L"\r\n");
dest = 0;
- while(*src != _T('\0'))
+ while(*src != L'\0')
{
- if((nl = _tcsstr(src, _T("\r\n"))))
+ if((nl = wcsstr(src, L"\r\n")))
{
linechars = nl - src;
if(nl == src)
}
else
{
- linechars = _tcslen(src);
+ linechars = wcslen(src);
}
if(linechars > 0)
{
- buflen += ((linechars + 1) * sizeof(TCHAR));
+ buflen += ((linechars + 1) * sizeof(WCHAR));
lines = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, lines, buflen);
- memcpy((lines + dest), src, linechars * sizeof(TCHAR));
+ memcpy((lines + dest), src, linechars * sizeof(WCHAR));
dest += linechars;
- lines[dest++] = _T('\0');
+ lines[dest++] = L'\0';
}
else
{
}
src += linechars + (nl != NULL ? c_nl : 0);
}
- lines[++dest] = _T('\0');
+ lines[++dest] = L'\0';
if(EmptyLines)
{
warning(hwnd, IDS_MULTI_SZ_EMPTY_STRING);
}
- lRet = RegSetValueEx(hKey, valueName, 0, type, (LPBYTE)lines, (DWORD) buflen);
+ lRet = RegSetValueExW(hKey, valueName, 0, type, (LPBYTE)lines, (DWORD) buflen);
HeapFree(GetProcessHeap(), 0, lines);
}
else
{
- lRet = RegSetValueEx(hKey, valueName, 0, type, NULL, 0);
+ lRet = RegSetValueExW(hKey, valueName, 0, type, NULL, 0);
}
if (lRet == ERROR_SUCCESS)
result = TRUE;
}
else if (EditBin == FALSE && type == REG_DWORD)
{
- lRet = RegQueryValueEx(hKey, valueName, 0, 0, (LPBYTE)&dwordValueData, &valueDataLen);
+ lRet = RegQueryValueExW(hKey, valueName, 0, 0, (LPBYTE)&dwordValueData, &valueDataLen);
if (lRet != ERROR_SUCCESS)
{
error(hwnd, IDS_BAD_VALUE, valueName);
goto done;
}
- if (DialogBox(0, MAKEINTRESOURCE(IDD_EDIT_DWORD), hwnd, modify_dword_dlgproc) == IDOK)
+ if (DialogBoxW(0, MAKEINTRESOURCEW(IDD_EDIT_DWORD), hwnd, modify_dword_dlgproc) == IDOK)
{
- lRet = RegSetValueEx(hKey, valueName, 0, type, (LPBYTE)&dwordValueData, sizeof(DWORD));
+ lRet = RegSetValueExW(hKey, valueName, 0, type, (LPBYTE)&dwordValueData, sizeof(DWORD));
if (lRet == ERROR_SUCCESS)
result = TRUE;
}
goto done;
}
- lRet = RegQueryValueEx(hKey, valueName, 0, 0, (LPBYTE)resourceValueData, &valueDataLen);
+ lRet = RegQueryValueExW(hKey, valueName, 0, 0, (LPBYTE)resourceValueData, &valueDataLen);
if (lRet != ERROR_SUCCESS)
{
error(hwnd, IDS_BAD_VALUE, valueName);
resourceValueData = NULL;
}
- if (DialogBox(0, MAKEINTRESOURCE(IDD_EDIT_RESOURCE_LIST), hwnd, modify_resource_list_dlgproc) == IDOK)
+ if (DialogBoxW(0, MAKEINTRESOURCEW(IDD_EDIT_RESOURCE_LIST), hwnd, modify_resource_list_dlgproc) == IDOK)
{
}
}
- else if (EditBin == TRUE || type == REG_NONE || type == REG_BINARY)
+ else if (EditBin == FALSE && type == REG_FULL_RESOURCE_DESCRIPTOR)
{
-#ifndef UNICODE
- LPWSTR u_valuename;
- int len_vname = lstrlen(valueName);
+ if (valueDataLen > 0)
+ {
+ resourceValueData = HeapAlloc(GetProcessHeap(), 0, valueDataLen + sizeof(ULONG));
+ if (resourceValueData == NULL)
+ {
+ error(hwnd, IDS_TOO_BIG_VALUE, valueDataLen);
+ goto done;
+ }
+
+ lRet = RegQueryValueExW(hKey, valueName, 0, 0, (LPBYTE)&resourceValueData->List[0], &valueDataLen);
+ if (lRet != ERROR_SUCCESS)
+ {
+ error(hwnd, IDS_BAD_VALUE, valueName);
+ goto done;
+ }
+
+ resourceValueData->Count = 1;
+ fullResourceIndex = 0;
+ }
+ else
+ {
+ resourceValueData = NULL;
+ }
- if(len_vname > 0)
+ if (DialogBoxW(0, MAKEINTRESOURCEW(IDD_EDIT_RESOURCE), hwnd, modify_resource_dlgproc) == IDOK)
{
- if(!(u_valuename = HeapAlloc(GetProcessHeap(), 0, (len_vname + 1) * sizeof(WCHAR))))
+ }
+ }
+ else if (EditBin == FALSE && type == REG_RESOURCE_REQUIREMENTS_LIST)
+ {
+ if (valueDataLen > 0)
+ {
+ requirementsValueData = HeapAlloc(GetProcessHeap(), 0, valueDataLen + sizeof(ULONG));
+ if (requirementsValueData == NULL)
+ {
+ error(hwnd, IDS_TOO_BIG_VALUE, valueDataLen);
+ goto done;
+ }
+
+ lRet = RegQueryValueExW(hKey, valueName, 0, 0, (LPBYTE)requirementsValueData, &valueDataLen);
+ if (lRet != ERROR_SUCCESS)
{
- error(hwnd, IDS_TOO_BIG_VALUE, len_vname);
+ error(hwnd, IDS_BAD_VALUE, valueName);
goto done;
}
- /* convert the ansi value name to an unicode string */
- MultiByteToWideChar(CP_ACP, 0, valueName, -1, u_valuename, len_vname + 1);
- valueDataLen *= sizeof(WCHAR);
+
}
else
- u_valuename = L"";
-#endif
+ {
+ requirementsValueData = NULL;
+ }
+
+ if (DialogBoxW(0, MAKEINTRESOURCEW(IDD_EDIT_REQUIREMENTS_LIST), hwnd, modify_requirements_list_dlgproc) == IDOK)
+ {
+ }
+ }
+ else if ((EditBin != FALSE) || (type == REG_NONE) || (type == REG_BINARY))
+ {
if(valueDataLen > 0)
{
if(!(binValueData = HeapAlloc(GetProcessHeap(), 0, valueDataLen + 1)))
goto done;
}
- /* force to use the unicode version, so editing strings in binary mode is correct */
- lRet = RegQueryValueExW(hKey,
-#ifndef UNICODE
- u_valuename,
-#else
- valueName,
-#endif
+ /* Use the unicode version, so editing strings in binary mode is correct */
+ lRet = RegQueryValueExW(hKey, valueName,
0, 0, (LPBYTE)binValueData, &valueDataLen);
if (lRet != ERROR_SUCCESS)
{
HeapFree(GetProcessHeap(), 0, binValueData);
-#ifndef UNICODE
- if(len_vname > 0)
- HeapFree(GetProcessHeap(), 0, u_valuename);
-#endif
error(hwnd, IDS_BAD_VALUE, valueName);
goto done;
}
binValueData = NULL;
}
- if (DialogBox(0, MAKEINTRESOURCE(IDD_EDIT_BIN_DATA), hwnd, modify_binary_dlgproc) == IDOK)
+ if (DialogBoxW(0, MAKEINTRESOURCEW(IDD_EDIT_BIN_DATA), hwnd, modify_binary_dlgproc) == IDOK)
{
- /* force to use the unicode version, so editing strings in binary mode is correct */
- lRet = RegSetValueExW(hKey,
-#ifndef UNICODE
- u_valuename,
-#else
- valueName,
-#endif
+ /* Use the unicode version, so editing strings in binary mode is correct */
+ lRet = RegSetValueExW(hKey, valueName,
0, type, (LPBYTE)binValueData, valueDataLen);
if (lRet == ERROR_SUCCESS)
result = TRUE;
}
if(binValueData != NULL)
HeapFree(GetProcessHeap(), 0, binValueData);
-#ifndef UNICODE
- if(len_vname > 0)
- HeapFree(GetProcessHeap(), 0, u_valuename);
-#endif
}
else
{
HeapFree(GetProcessHeap(), 0, stringValueData);
stringValueData = NULL;
+ if (requirementsValueData)
+ HeapFree(GetProcessHeap(), 0, requirementsValueData);
+ requirementsValueData = NULL;
+
return result;
}
-static LONG CopyKey(HKEY hDestKey, LPCTSTR lpDestSubKey, HKEY hSrcKey, LPCTSTR lpSrcSubKey)
+static LONG CopyKey(HKEY hDestKey, LPCWSTR lpDestSubKey, HKEY hSrcKey, LPCWSTR lpSrcSubKey)
{
LONG lResult;
DWORD dwDisposition;
HKEY hDestSubKey = NULL;
HKEY hSrcSubKey = NULL;
DWORD dwIndex, dwType, cbName, cbData;
- TCHAR szSubKey[256];
- TCHAR szValueName[256];
+ WCHAR szSubKey[256];
+ WCHAR szValueName[256];
BYTE szValueData[512];
FILETIME ft;
/* open the source subkey, if specified */
if (lpSrcSubKey)
{
- lResult = RegOpenKeyEx(hSrcKey, lpSrcSubKey, 0, KEY_ALL_ACCESS, &hSrcSubKey);
+ lResult = RegOpenKeyExW(hSrcKey, lpSrcSubKey, 0, KEY_ALL_ACCESS, &hSrcSubKey);
if (lResult)
goto done;
hSrcKey = hSrcSubKey;
}
/* create the destination subkey */
- lResult = RegCreateKeyEx(hDestKey, lpDestSubKey, 0, NULL, 0, KEY_WRITE, NULL,
+ lResult = RegCreateKeyExW(hDestKey, lpDestSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL,
&hDestSubKey, &dwDisposition);
if (lResult)
goto done;
do
{
cbName = sizeof(szSubKey) / sizeof(szSubKey[0]);
- lResult = RegEnumKeyEx(hSrcKey, dwIndex++, szSubKey, &cbName, NULL, NULL, NULL, &ft);
+ lResult = RegEnumKeyExW(hSrcKey, dwIndex++, szSubKey, &cbName, NULL, NULL, NULL, &ft);
if (lResult == ERROR_SUCCESS)
{
lResult = CopyKey(hDestSubKey, szSubKey, hSrcKey, szSubKey);
{
cbName = sizeof(szValueName) / sizeof(szValueName[0]);
cbData = sizeof(szValueData) / sizeof(szValueData[0]);
- lResult = RegEnumValue(hSrcKey, dwIndex++, szValueName, &cbName, NULL, &dwType, szValueData, &cbData);
+ lResult = RegEnumValueW(hSrcKey, dwIndex++, szValueName, &cbName, NULL, &dwType, szValueData, &cbData);
if (lResult == ERROR_SUCCESS)
{
- lResult = RegSetValueEx(hDestSubKey, szValueName, 0, dwType, szValueData, cbData);
+ lResult = RegSetValueExW(hDestSubKey, szValueName, 0, dwType, szValueData, cbData);
if (lResult)
goto done;
}
return lResult;
}
-static LONG MoveKey(HKEY hDestKey, LPCTSTR lpDestSubKey, HKEY hSrcKey, LPCTSTR lpSrcSubKey)
+static LONG MoveKey(HKEY hDestKey, LPCWSTR lpDestSubKey, HKEY hSrcKey, LPCWSTR lpSrcSubKey)
{
LONG lResult;
if (!lpSrcSubKey)
return ERROR_INVALID_FUNCTION;
+ if (_wcsicmp(lpDestSubKey, lpSrcSubKey) == 0)
+ {
+ /* Destination name equals source name */
+ return ERROR_SUCCESS;
+ }
+
lResult = CopyKey(hDestKey, lpDestSubKey, hSrcKey, lpSrcSubKey);
if (lResult == ERROR_SUCCESS)
SHDeleteKey(hSrcKey, lpSrcSubKey);
return lResult;
}
-BOOL DeleteKey(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath)
+BOOL DeleteKey(HWND hwnd, HKEY hKeyRoot, LPCWSTR keyPath)
{
- TCHAR msg[128], caption[128];
+ WCHAR msg[128], caption[128];
BOOL result = FALSE;
LONG lRet;
HKEY hKey;
- lRet = RegOpenKeyEx(hKeyRoot, keyPath, 0, KEY_READ|KEY_SET_VALUE, &hKey);
+ lRet = RegOpenKeyExW(hKeyRoot, keyPath, 0, KEY_READ|KEY_SET_VALUE, &hKey);
if (lRet != ERROR_SUCCESS)
{
error_code_messagebox(hwnd, lRet);
return FALSE;
}
- LoadString(hInst, IDS_QUERY_DELETE_KEY_CONFIRM, caption, sizeof(caption)/sizeof(TCHAR));
- LoadString(hInst, IDS_QUERY_DELETE_KEY_ONE, msg, sizeof(msg)/sizeof(TCHAR));
+ LoadStringW(hInst, IDS_QUERY_DELETE_KEY_CONFIRM, caption, ARRAY_SIZE(caption));
+ LoadStringW(hInst, IDS_QUERY_DELETE_KEY_ONE, msg, ARRAY_SIZE(msg));
- if (MessageBox(g_pChildWnd->hWnd, msg, caption, MB_ICONQUESTION | MB_YESNO) != IDYES)
+ if (MessageBoxW(g_pChildWnd->hWnd, msg, caption, MB_ICONQUESTION | MB_YESNO) != IDYES)
goto done;
lRet = SHDeleteKey(hKeyRoot, keyPath);
return result;
}
-LONG RenameKey(HKEY hKey, LPCTSTR lpSubKey, LPCTSTR lpNewName)
+LONG RenameKey(HKEY hKey, LPCWSTR lpSubKey, LPCWSTR lpNewName)
{
- LPCTSTR s;
- LPTSTR lpNewSubKey = NULL;
+ LPCWSTR s;
+ LPWSTR lpNewSubKey = NULL;
LONG Ret = 0;
+ SIZE_T cbNewSubKey;
if (!lpSubKey)
return Ret;
- s = _tcsrchr(lpSubKey, _T('\\'));
+ s = wcsrchr(lpSubKey, L'\\');
if (s)
{
s++;
- lpNewSubKey = (LPTSTR) HeapAlloc(GetProcessHeap(), 0, (s - lpSubKey + _tcslen(lpNewName) + 1) * sizeof(TCHAR));
+ cbNewSubKey = (s - lpSubKey + wcslen(lpNewName) + 1) * sizeof(WCHAR);
+ lpNewSubKey = (LPWSTR) HeapAlloc(GetProcessHeap(), 0, cbNewSubKey);
if (lpNewSubKey != NULL)
{
- memcpy(lpNewSubKey, lpSubKey, (s - lpSubKey) * sizeof(TCHAR));
- lstrcpy(lpNewSubKey + (s - lpSubKey), lpNewName);
+ StringCbCopyNW(lpNewSubKey, cbNewSubKey, lpSubKey, (s - lpSubKey) * sizeof(WCHAR));
+ StringCbCatW(lpNewSubKey, cbNewSubKey, lpNewName);
lpNewName = lpNewSubKey;
}
else
return Ret;
}
-LONG RenameValue(HKEY hKey, LPCTSTR lpSubKey, LPCTSTR lpDestValue, LPCTSTR lpSrcValue)
+LONG RenameValue(HKEY hKey, LPCWSTR lpSubKey, LPCWSTR lpDestValue, LPCWSTR lpSrcValue)
{
LONG lResult;
HKEY hSubKey = NULL;
if (lpSubKey)
{
- lResult = RegOpenKey(hKey, lpSubKey, &hSubKey);
+ lResult = RegOpenKeyW(hKey, lpSubKey, &hSubKey);
if (lResult != ERROR_SUCCESS)
goto done;
hKey = hSubKey;
}
cbData = sizeof(data);
- lResult = RegQueryValueEx(hKey, lpSrcValue, NULL, &dwType, data, &cbData);
+ lResult = RegQueryValueExW(hKey, lpSrcValue, NULL, &dwType, data, &cbData);
if (lResult != ERROR_SUCCESS)
goto done;
- lResult = RegSetValueEx(hKey, lpDestValue, 0, dwType, data, cbData);
+ lResult = RegSetValueExW(hKey, lpDestValue, 0, dwType, data, cbData);
if (lResult != ERROR_SUCCESS)
goto done;
return lResult;
}
-LONG QueryStringValue(HKEY hKey, LPCTSTR lpSubKey, LPCTSTR lpValueName, LPTSTR pszBuffer, DWORD dwBufferLen)
+LONG QueryStringValue(HKEY hKey, LPCWSTR lpSubKey, LPCWSTR lpValueName, LPWSTR pszBuffer, DWORD dwBufferLen)
{
LONG lResult;
HKEY hSubKey = NULL;
if (lpSubKey)
{
- lResult = RegOpenKey(hKey, lpSubKey, &hSubKey);
+ lResult = RegOpenKeyW(hKey, lpSubKey, &hSubKey);
if (lResult != ERROR_SUCCESS)
goto done;
hKey = hSubKey;
}
cbData = (dwBufferLen - 1) * sizeof(*pszBuffer);
- lResult = RegQueryValueEx(hKey, lpValueName, NULL, &dwType, (LPBYTE) pszBuffer, &cbData);
+ lResult = RegQueryValueExW(hKey, lpValueName, NULL, &dwType, (LPBYTE) pszBuffer, &cbData);
if (lResult != ERROR_SUCCESS)
goto done;
if (dwType != REG_SZ)
goto done;
}
- pszBuffer[cbData / sizeof(*pszBuffer)] = _T('\0');
+ pszBuffer[cbData / sizeof(*pszBuffer)] = L'\0';
done:
if (lResult != ERROR_SUCCESS)
- pszBuffer[0] = _T('\0');
+ pszBuffer[0] = L'\0';
if (hSubKey)
RegCloseKey(hSubKey);
return lResult;
}
-BOOL GetKeyName(LPTSTR pszDest, size_t iDestLength, HKEY hRootKey, LPCTSTR lpSubKey)
+BOOL GetKeyName(LPWSTR pszDest, size_t iDestLength, HKEY hRootKey, LPCWSTR lpSubKey)
{
- LPCTSTR pszRootKey;
+ LPCWSTR pszRootKey;
if (hRootKey == HKEY_CLASSES_ROOT)
- pszRootKey = TEXT("HKEY_CLASSES_ROOT");
+ pszRootKey = L"HKEY_CLASSES_ROOT";
else if (hRootKey == HKEY_CURRENT_USER)
- pszRootKey = TEXT("HKEY_CURRENT_USER");
+ pszRootKey = L"HKEY_CURRENT_USER";
else if (hRootKey == HKEY_LOCAL_MACHINE)
- pszRootKey = TEXT("HKEY_LOCAL_MACHINE");
+ pszRootKey = L"HKEY_LOCAL_MACHINE";
else if (hRootKey == HKEY_USERS)
- pszRootKey = TEXT("HKEY_USERS");
+ pszRootKey = L"HKEY_USERS";
else if (hRootKey == HKEY_CURRENT_CONFIG)
- pszRootKey = TEXT("HKEY_CURRENT_CONFIG");
+ pszRootKey = L"HKEY_CURRENT_CONFIG";
else if (hRootKey == HKEY_DYN_DATA)
- pszRootKey = TEXT("HKEY_DYN_DATA");
+ pszRootKey = L"HKEY_DYN_DATA";
else
return FALSE;
if (lpSubKey[0])
- _sntprintf(pszDest, iDestLength, TEXT("%s\\%s"), pszRootKey, lpSubKey);
+ _snwprintf(pszDest, iDestLength, L"%s\\%s", pszRootKey, lpSubKey);
else
- _sntprintf(pszDest, iDestLength, TEXT("%s"), pszRootKey);
+ _snwprintf(pszDest, iDestLength, L"%s", pszRootKey);
return TRUE;
}