MCPcopy Create free account
hub / github.com/KDE/kdiff3 / do_unregister

Method do_unregister

diff_ext_for_kdiff3/server.cpp:382–428  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

380}
381
382HRESULT
383SERVER::do_unregister() {
384 LOG();
385 TCHAR class_id[MAX_PATH];
386 LPWSTR tmp_guid;
387 HRESULT ret = SELFREG_E_CLASS;
388
389 if (StringFromIID(CLSID_DIFF_EXT, &tmp_guid) == S_OK) {
390 _tcsncpy(class_id, tmp_guid, MAX_PATH);
391
392 CoTaskMemFree((void*)tmp_guid);
393
394 LRESULT result = NOERROR;
395 TCHAR subkey[MAX_PATH];
396
397 REGSTRUCT entry[] = {
398 {TEXT("Software\\Classes\\CLSID\\%s\\InProcServer32"), nullptr, nullptr},
399 {TEXT("Software\\Classes\\CLSID\\%s"), nullptr, nullptr}
400 };
401
402 for(unsigned int i = 0; (i < sizeof(entry)/sizeof(entry[0])) && (result == NOERROR); i++) {
403 _stprintf(subkey, entry[i].subkey, class_id);
404 result = RegDeleteKey(HKEY_CURRENT_USER, subkey);
405 }
406
407 if(result == NOERROR) {
408 result = RegDeleteKey(HKEY_CURRENT_USER, TEXT("Software\\Classes\\*\\shellex\\ContextMenuHandlers\\kdiff3ext"));
409
410 if(result == NOERROR) {
411 // NT needs to have shell extensions "approved".
412 HKEY key;
413
414 RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved"), 0, KEY_ALL_ACCESS, &key);
415
416 result = RegDeleteValue(key, class_id);
417
418 RegCloseKey(key);
419
420 if(result == ERROR_SUCCESS) {
421 ret = S_OK;
422 }
423 }
424 }
425 }
426
427 return ret;
428}

Callers 1

DllUnregisterServerFunction · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected