diff options
author | Armada <jules.blok@gmail.com> | 2013-02-02 00:59:37 +0400 |
---|---|---|
committer | Armada <jules.blok@gmail.com> | 2013-02-02 03:16:57 +0400 |
commit | 22c3f31f5bbdf68b0b8c0a556d610a77e44b250b (patch) | |
tree | 159607dc677bfcc9f722b0bc2ed23c76d91cca90 | |
parent | 1e28aaa832ffd487356d347d7ccbf7d7aa96bdb2 (diff) |
Use bytes to identify parts instead of the extension.
This allows support for parts beyond .r99 and any other extension.
-rw-r--r-- | RFS.cpp | 64 |
1 files changed, 37 insertions, 27 deletions
@@ -115,9 +115,10 @@ STDAPI DllRegisterServer () { HKEY key; LONG ret; - int i; wchar_t key_name [] = L"Media Type\\Extensions\\.rar"; - + wchar_t byte_key_name [] = L"Media Type\\{E436EB83-524F-11CE-9F53-0020AF0BA770}\\{7F1CD2B6-DFC6-4F4C-982B-0472673920AD}"; + char bytes [] = "0,4,,52617221"; + ret = RegCreateKey (HKEY_CLASSES_ROOT, key_name, &key); if (ret != ERROR_SUCCESS) @@ -127,7 +128,7 @@ STDAPI DllRegisterServer () if (ret != ERROR_SUCCESS) return ret; } - + ret = RegSetValueExA (key, "Source Filter", 0, REG_SZ, (BYTE *) RFS_GUID_STRING, (DWORD) strlen (RFS_GUID_STRING) + 1); if (ret != ERROR_SUCCESS) @@ -138,26 +139,27 @@ STDAPI DllRegisterServer () RegCloseKey (key); - for (i = 0; i < 100; i ++) - { - key_name [24] = L'0' + i / 10; - key_name [25] = L'0' + i % 10; + ret = RegCreateKey (HKEY_CLASSES_ROOT, byte_key_name, &key); - ret = RegCreateKey (HKEY_CLASSES_ROOT, key_name, &key); + if (ret != ERROR_SUCCESS) + { + ret = RegOpenKey (HKEY_CLASSES_ROOT, byte_key_name, &key); if (ret != ERROR_SUCCESS) - { - ret = RegOpenKey (HKEY_CLASSES_ROOT, key_name, &key); - - if (ret != ERROR_SUCCESS) - continue; - } + return ret; + } - ret = RegSetValueExA (key, "Source Filter", 0, REG_SZ, (BYTE *) RFS_GUID_STRING, (DWORD) strlen (RFS_GUID_STRING) + 1); + ret = RegSetValueExA (key, "0", 0, REG_SZ, (BYTE *) bytes, (DWORD) strlen (bytes)); + ret = RegSetValueExA (key, "Source Filter", 0, REG_SZ, (BYTE *) RFS_GUID_STRING, (DWORD) strlen (RFS_GUID_STRING) + 1); + if (ret != ERROR_SUCCESS) + { RegCloseKey (key); + return ret; } + RegCloseKey (key); + return AMovieDllRegisterServer2 (TRUE); } @@ -168,24 +170,32 @@ STDAPI DllUnregisterServer () char value [40]; DWORD len = sizeof (value); wchar_t key_name [] = L"Media Type\\Extensions\\.rar"; - int i; + wchar_t byte_key_name [] = L"Media Type\\{E436EB83-524F-11CE-9F53-0020AF0BA770}\\{7F1CD2B6-DFC6-4F4C-982B-0472673920AD}"; - for (i = 0; i < 101; i ++) + ret = RegOpenKey (HKEY_CLASSES_ROOT, key_name, &key); + if (ret == ERROR_SUCCESS) { - ret = RegOpenKey (HKEY_CLASSES_ROOT, key_name, &key); + ret = RegQueryValueExA (key, "Source Filter", NULL, NULL, (BYTE *) value, &len); + RegCloseKey (key); + if (ret == ERROR_SUCCESS) { - ret = RegQueryValueExA (key, "Source Filter", NULL, NULL, (BYTE *) value, &len); - RegCloseKey (key); + if (!_stricmp (value, RFS_GUID_STRING)) + RegDeleteKey (HKEY_CLASSES_ROOT, key_name); + } + } - if (ret == ERROR_SUCCESS) - { - if (!_stricmp (value, RFS_GUID_STRING)) - RegDeleteKey (HKEY_CLASSES_ROOT, key_name); - } + ret = RegOpenKey (HKEY_CLASSES_ROOT, byte_key_name, &key); + if (ret == ERROR_SUCCESS) + { + ret = RegQueryValueExA (key, "Source Filter", NULL, NULL, (BYTE *) value, &len); + RegCloseKey (key); + + if (ret == ERROR_SUCCESS) + { + if (!_stricmp (value, RFS_GUID_STRING)) + RegDeleteKey (HKEY_CLASSES_ROOT, byte_key_name); } - key_name [24] = L'0' + i / 10; - key_name [25] = L'0' + i % 10; } return AMovieDllRegisterServer2 (FALSE); |