mirror of https://github.com/lianthony/NT4.0
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
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);
|
|
}
|
|
|