Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

192 lines
4.4 KiB

LSERR LSReadListFromStorageNP(DWORD dwId, HANDLE FAR * phList)
{
LSERR locRet;
HANDLE locElementHnd;
VOID FAR * locElementPtr;
DWORD locElementSize;
BYTE locKeyPath[256];
BYTE locCompany[40];
BYTE locProduct[40];
BYTE locVersion[40];
BYTE locList[40];
HKEY locFilterKeyHnd;
LONG locRegRet;
BYTE locValue[40];
DWORD locValueIndex;
DWORD locValueSize;
#ifdef MSCAIRO
if( dwId != SCCID_FILTERLIST )
return(LSERR_BADLISTID);
lstrcpy(locCompany,"SCC");
lstrcpy(locProduct,"Viewer Technolog");
lstrcpy(locVersion,"MS2");
lstrcpy(locList,"Filter List");
#else
if (!(dwId & SCCIDTYPE_LIST))
return(LSERR_BADLISTID);
LOGetString(SCCID_REGNAME_COMPANY, locCompany, 40, 0);
LOGetString(SCCID_REGNAME_PRODUCT, locProduct, 40, 0);
LOGetString(SCCID_REGNAME_VERSION, locVersion, 40, 0);
LOGetString(dwId, locList, 40, 0);
#endif
wsprintf(locKeyPath,"Software\\%s\\%s\\%s\\%s",locCompany,locProduct,locVersion, locList);
locRegRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE,locKeyPath,0,KEY_ALL_ACCESS,&locFilterKeyHnd);
if (locRegRet == ERROR_SUCCESS)
{
locValueSize = sizeof(DWORD);
locRegRet = RegQueryValueEx(locFilterKeyHnd,"ElementSize",0,NULL,(LPBYTE)&locElementSize,&locValueSize);
if (locRegRet == ERROR_SUCCESS)
{
locRet = LSCreateList(dwId, 0, locElementSize, phList);
if (locRet == LSERR_OK)
{
locElementHnd = UTGlobalAlloc(locElementSize);
if (locElementHnd)
{
locElementPtr = UTGlobalLock(locElementHnd);
locValueIndex = 0;
locRegRet = ERROR_SUCCESS;
while (locRegRet == ERROR_SUCCESS)
{
wsprintf(locValue,"Element%li",locValueIndex);
locValueSize = locElementSize;
locRegRet = RegQueryValueEx(locFilterKeyHnd,locValue,0,NULL,(LPBYTE)locElementPtr,&locValueSize);
if (locRegRet == ERROR_SUCCESS && locValueSize == locElementSize)
LSAddElement(*phList, locElementPtr);
locValueIndex++;
}
UTGlobalUnlock(locElementHnd);
UTGlobalFree(locElementHnd);
LSSetListDirty(*phList,FALSE);
}
else
{
locRet = LSERR_ALLOCFAILED;
}
}
}
else
{
locRet = LSERR_NOLIST;
}
RegCloseKey(locFilterKeyHnd);
}
else
{
locRet = LSERR_NOLIST;
}
return(locRet);
}
LSERR LSWriteListToStorageNP(HANDLE hList)
{
LSERR locRet;
DWORD locCount;
DWORD locIndex;
HANDLE locElementHnd;
VOID FAR * locElementPtr;
DWORD locElementSize;
DWORD locId;
BYTE locKeyPath[256];
BYTE locCompany[40];
BYTE locProduct[40];
BYTE locVersion[40];
BYTE locList[40];
HKEY locKeyHnd;
HKEY locFilterKeyHnd;
DWORD locDisposition;
LONG locRegRet;
BYTE locValue[40];
LSGetListId(hList, &locId);
#ifdef MSCAIRO
if( locId != SCCID_FILTERLIST )
return(LSERR_BADLISTID);
lstrcpy(locCompany,"SCC");
lstrcpy(locProduct,"Viewer Technolog");
lstrcpy(locVersion,"MS2");
lstrcpy(locList,"Filter List");
#else
if (!(locId & SCCIDTYPE_LIST))
return(LSERR_BADLISTID);
LOGetString(SCCID_REGNAME_COMPANY, locCompany, 40, 0);
LOGetString(SCCID_REGNAME_PRODUCT, locProduct, 40, 0);
LOGetString(SCCID_REGNAME_VERSION, locVersion, 40, 0);
LOGetString(locId, locList, 40, 0);
#endif
wsprintf(locKeyPath,"Software\\%s\\%s\\%s",locCompany,locProduct,locVersion);
locRegRet = RegCreateKeyEx(HKEY_LOCAL_MACHINE,locKeyPath,0,"Class???",REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&locKeyHnd,&locDisposition);
if (locRegRet == ERROR_SUCCESS)
{
RegDeleteKey(locKeyHnd,locList);
locRegRet = RegCreateKeyEx(locKeyHnd,locList,0,"Class???",REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&locFilterKeyHnd,&locDisposition);
if (locRegRet == ERROR_SUCCESS)
{
LSGetListCount(hList,&locCount);
LSGetListElementSize(hList,&locElementSize);
RegSetValueEx(locFilterKeyHnd,"ElementSize",0,REG_DWORD,(LPBYTE)&locElementSize,sizeof(DWORD));
locIndex = 0;
locElementHnd = UTGlobalAlloc(locElementSize);
if (locElementHnd)
{
locElementPtr = UTGlobalLock(locElementHnd);
while (locIndex < locCount)
{
LSGetElementByIndex(hList, locIndex, locElementPtr);
wsprintf(locValue,"Element%li",locIndex);
RegSetValueEx(locFilterKeyHnd,locValue,0,REG_BINARY,locElementPtr,locElementSize);
locIndex++;
}
}
else
{
locRet = LSERR_ALLOCFAILED;
}
RegCloseKey(locFilterKeyHnd);
}
else
{
locRet == LSERR_NOLIST;
}
RegCloseKey(locKeyHnd);
}
else
{
locRet == LSERR_NOLIST;
}
return(locRet);
}