Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mpc-hc/rarfilesource.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArmada <jules.blok@gmail.com>2013-02-02 00:59:37 +0400
committerArmada <jules.blok@gmail.com>2013-02-02 03:16:57 +0400
commit22c3f31f5bbdf68b0b8c0a556d610a77e44b250b (patch)
tree159607dc677bfcc9f722b0bc2ed23c76d91cca90
parent1e28aaa832ffd487356d347d7ccbf7d7aa96bdb2 (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.cpp64
1 files changed, 37 insertions, 27 deletions
diff --git a/RFS.cpp b/RFS.cpp
index de62815..1b2600f 100644
--- a/RFS.cpp
+++ b/RFS.cpp
@@ -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);