PDA

Visualizza la versione completa : [C++ Windows Mobile] problemi con RegSetValueEx


DarthSandr
12-01-2012, 16:02
Ciao a tutti.
Ho scritto il seguente codice:



void CTestSerialLibPDADlg::ManagePowerSetting() {
DWORD i, dwValueSize, j;
WCHAR Value[1024];
WCHAR RegKey[1024];
HKEY hkey, hkey1;
DWORD dwValueType = REG_EXPAND_SZ;
WCHAR ValueVect[1024];
WCHAR Res[1024];

i = 0;
dwValueSize = 1024;

if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"Drivers\\Active", 0, KEY_ALL_ACCESS, &hkey) == ERROR_SUCCESS) {
while (RegEnumKeyEx(hkey, i, Value, &dwValueSize, NULL, NULL, NULL, NULL) == ERROR_SUCCESS) {
// SendDlgItemMessage(IDC_LIST1, LB_ADDSTRING, 0, (LPARAM) (LPCTSTR) Value);
swprintf(RegKey, L"Drivers\\Active\\%s", Value);
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, RegKey, 0, KEY_ALL_ACCESS, &hkey1) == ERROR_SUCCESS) {
dwValueSize = 1024;
if (RegQueryValueEx(hkey1, L"Key", NULL, &dwValueType, (LPBYTE)Value, &dwValueSize) == ERROR_SUCCESS) {
if (wcscmp(Value, L"\\Drivers\\SDCARD\\ClientDrivers\\Class\\SDMemory_ Class") == 0) {
SendDlgItemMessage(IDC_LIST1, LB_ADDSTRING, 0, (LPARAM) (LPCTSTR) Value);
UpdateWindow();

LONG res = RegSetValueEx(hkey1, L"DisablePowerManagement", 0, REG_DWORD, 0, 1);
if (res == ERROR_SUCCESS) {
SendDlgItemMessage(IDC_LIST1, LB_ADDSTRING, 0, (LPARAM) (LPCTSTR) L"Registro modificato");
UpdateWindow();
}
else {
SendDlgItemMessage(IDC_LIST1, LB_ADDSTRING, 0, (LPARAM) (LPCTSTR) L"Modifica fallita");
if (res == NULL) {
SendDlgItemMessage(IDC_LIST1, LB_ADDSTRING, 0, (LPARAM) (LPCTSTR) L"Res NULL");
UpdateWindow();
}
else {
swprintf(Res, L"Res: %i", res);
SendDlgItemMessage(IDC_LIST1, LB_ADDSTRING, 0, (LPARAM) (LPCTSTR) res);
UpdateWindow();
}
}
}
}
}
dwValueSize = 1024;
i++;
}
RegCloseKey(hkey1);
RegCloseKey(hkey);
}
}


con l'idea di effettuare una scansione dei driver dal registro di sistema del terminale mobile e disabilitare il power off della micro SD.
Ora tutto apparentemente funziona fino al recupero del driver della microSD ma quando chiamo la RegSetValueEx succede che non si ha un successo (il valore di ritorno non e' ERROR_SUCCESS) ma sembra che res sia in qualche stato non ben definito perche' le stampe a video si fermano a:

SendDlgItemMessage(IDC_LIST1, LB_ADDSTRING, 0, (LPARAM) (LPCTSTR) L"Modifica fallita");

Io ho cercato su internet ma a riguardo sto trovando davvero poco, sopratutto per risolvere cio' che devo fare, ovvero disabilitare il power off della micro SD, sto trovando solo esempi di codice per .Net mentre io uso C++.

qualcuno mi puo' aiutare?

ciao e grazie
Sandro

Loading