用 CreateNewPseudoWindows 和 CreateNewOfflineStore 创建 Store
创建 Store 需要用到 CreateNewOfflineStore 函数,有四个参数:
_In_ DWORD dwFlags,
_In_ PCOFFLINE_STORE_CREATION_PARAMETERS pParameters,
_In_ REFIID riid,
_Out_ IUnknown **ppStore,
_Out_opt_ DWORD *pdwDisposition
第一个参数为标志,0 或 1
第二个参数 OFFLINE_STORE_CREATION_PARAMETERS 类型,很复杂,因此,需要用到另外一个函数去创建
第三个参数 a817521b_2b43_489f_8b84_67aceeab24a8
第四个为输出参数,返回 CComponentStore 和CComponentStore_IStore 的 vftable。
创建 OFFLINE_STORE_CREATION_PARAMETERS 类型的对象,需要用到CreateNewPseudoWindows 函数,它也有四个参数:
_In_ DWORD dwFlags,
_In_opt_ LPCWSTR pszDirectoryRoot,
_In_opt_ LPCWSTR pszRegistryRoot,
_Inout_ POFFLINE_STORE_CREATION_PARAMETERSpParameters);
第一个参数为标志,0 或 1
第二个参数为保存 Store 的根目录,比如,C:\CSITEST
第三个参数为保存 Store 的根键,比如,HKCU\CSITEST
目录和键应先创建
第四个为输出参数,把相应的值填到了 OFFLINE_STORE_CREATION_PARAMETERS对象。因为,是先创建再赋值,可以保证结果的正确。
0x00000038
0x00000000
0x00502850 L"C:\\CSITEST\\system_volume"
0x004fe948 L"C:\\CSITEST\\boot_volume\\WinLH"
0x00507cb0 L"b:\\WinLH\\"
0x0050af28L"HKEY_USERS\\S-1-5-21-1293183473-3062865270-1199649827-1001\\CSITEST\\Registry\\Machine\\SOFTWARE"
0x0050afe8L"HKEY_USERS\\S-1-5-21-1293183473-3062865270-1199649827-1001\\CSITEST\\Registry\\Machine\\SYSTEM"
0x0050b0a8L"HKEY_USERS\\S-1-5-21-1293183473-3062865270-1199649827-1001\\CSITEST\\Registry\\Machine\\SECURITY"
0x0050b168 L"HKEY_USERS\\S-1-5-21-1293183473-3062865270-1199649827-1001\\CSITEST\\Registry\\Machine\\SAM"
0x0050b220L"HKEY_USERS\\S-1-5-21-1293183473-3062865270-1199649827-1001\\CSITEST\\Registry\\Machine\\Components"
0x0050b2e8 L"HKEY_USERS\\S-1-5-21-1293183473-3062865270-1199649827-1001\\CSITEST\\Registry\\User\\.Default"
0x0050b3a8L"HKEY_USERS\\S-1-5-21-1293183473-3062865270-1199649827-1001\\CSITEST\\Registry\\User\\Template"
0x00000000
0x0050b468L"HKEY_USERS\\S-1-5-21-1293183473-3062865270-1199649827-1001\\CSITEST\\Registry\\Machine\\Schema"
OFFLINE_STORE_CREATION_PARAMETERS pParameters = { sizeof(pParameters) };
pCreateNewPseudoWindows(0, L"C:\\CSITEST", L"HKCU\\CSITEST", &pParameters);
IUnknown *ppStore;
DWORD d = 0;
pCreateNewOfflineStore(1, &pParameters, IID_OfflineStore, &ppStore, &d);