source: trunk/DirectShowSpy/Configuration.cpp @ 432

Last change on this file since 432 was 432, checked in by roman, 7 years ago

VS2013 related updates; use of CSIDL_LOCAL_APPDATA instead of CSIDL_APPDATA for fallback log writes; added bitness and privilege indication in all captions

  • Property svn:keywords set to Id
File size: 4.0 KB
Line 
1////////////////////////////////////////////////////////////
2// Copyright (C) Roman Ryltsov, 2008-2015
3// Created by Roman Ryltsov roman@alax.info, http://alax.info
4//
5// This source code is published to complement DirectShowSpy developer powertoy
6// and demonstrate the internal use of APIs and tricks powering the tool. It is
7// allowed to freely re-use the portions of the code in other projects, commercial
8// or otherwise (provided that you don’t pretend that you wrote the original tool).
9//
10// Please keep in mind that DirectShowSpy is a developer tool, it is strongly recommended
11// that it is not shipped with release grade software. It is allowed to distribute
12// DirectShowSpy if only it is not registered with Windows by default and either
13// used privately, or registered on specific throubleshooting request. The advice applies
14// to hooking methods used by DirectShowSpy in general as well.
15
16#include "stdafx.h"
17#include <dshow.h>
18#include "resource.h"
19#include "Common.h"
20#include "Configuration.h"
21
22////////////////////////////////////////////////////////////
23// UnregisterTreatAsClasses
24
25#if defined(_WIN64)
26        extern "C" __declspec(dllexport) 
27#else
28        #pragma comment(linker, "/EXPORT:UnregisterTreatAsClasses=_UnregisterTreatAsClasses@0,PRIVATE")
29        extern "C" // __declspec(dllexport)
30#endif // defined(_WIN64)
31
32HRESULT STDMETHODCALLTYPE UnregisterTreatAsClasses() throw()
33{
34        _ATLTRY
35        {
36                static const CLSID* g_ppClassIdentifiers[] = 
37                {
38                        &CLSID_FilterMapper2, // CFilterMapperSpy
39                        &CLSID_SystemDeviceEnum, // CLSID_SystemDeviceEnumeratorSpy
40                        &CLSID_FilterGraph, // CLSID_Spy
41                        &CLSID_FilterGraphNoThread, // CLSID_NoThreadSpy
42                };
43                CProcessTokenPrivileges ProcessTokenPrivileges;
44                BOOL bProcessTokenPrivilegesAdjustNeeded = TRUE;
45                for(SIZE_T nIndex = 0; nIndex < DIM(g_ppClassIdentifiers); nIndex++)
46                {
47                        const CLSID& ClassIdentifier = *g_ppClassIdentifiers[nIndex];
48                        _Z4(atlTraceGeneral, 4, _T("nIndex %d, ClassIdentifier %ls\n"), nIndex, _PersistHelper::StringFromIdentifier(ClassIdentifier));
49                        _ATLTRY
50                        {
51                                CLSID CurrentTreatAsClassIdentifier = CLSID_NULL;
52                                const HRESULT nCoGetTreatAsClassResult = CoGetTreatAsClass(ClassIdentifier, &CurrentTreatAsClassIdentifier);
53                                _Z4_HRESULT(nCoGetTreatAsClassResult);
54                                __C(nCoGetTreatAsClassResult);
55                                if(nCoGetTreatAsClassResult != S_OK)
56                                        continue;
57                                _Z4(atlTraceGeneral, 4, _T("CurrentTreatAsClassIdentifier %ls\n"), _PersistHelper::StringFromIdentifier(CurrentTreatAsClassIdentifier));
58                                #pragma region Adjust
59                                if(bProcessTokenPrivilegesAdjustNeeded)
60                                {
61                                        bProcessTokenPrivilegesAdjustNeeded = FALSE;
62                                        if(IsWindowsVistaOrGreater())
63                                                _ATLTRY
64                                                {
65                                                        ProcessTokenPrivileges.Adjust();
66                                                }
67                                                _ATLCATCHALL()
68                                                {
69                                                        _Z_EXCEPTION();
70                                                }
71                                }
72                                #pragma endregion
73                                CClassIdentifierRegKeySecurity ClassIdentifierRegKeySecurity(ClassIdentifier);
74                                if(IsWindowsVistaOrGreater())
75                                        ClassIdentifierRegKeySecurity.Adjust();
76                                const HRESULT nCoTreatAsClassResult = CoTreatAsClass(ClassIdentifier, CLSID_NULL);
77                                _Z4_HRESULT(nCoTreatAsClassResult);
78                                __C(nCoTreatAsClassResult);
79                        }
80                        _ATLCATCHALL()
81                        {
82                                _Z_EXCEPTION();
83                        }
84                }
85        }
86        _ATLCATCH(Exception)
87        {
88                _C(Exception);
89        }
90        return S_OK;
91}
92
93////////////////////////////////////////////////////////////
94// DoRegistrationPropertySheetModal
95
96#if defined(_WIN64)
97        extern "C" __declspec(dllexport) 
98#else
99        #pragma comment(linker, "/EXPORT:DoRegistrationPropertySheetModal=_DoRegistrationPropertySheetModal@0,PRIVATE")
100        extern "C" // __declspec(dllexport)
101#endif // defined(_WIN64)
102
103HRESULT STDMETHODCALLTYPE DoRegistrationPropertySheetModal() throw()
104{
105        _ATLTRY
106        {
107                CSingleThreadedApartment SingleThreadedApartment;
108                _W(AtlInitCommonControls(ICC_WIN95_CLASSES | ICC_COOL_CLASSES | ICC_STANDARD_CLASSES));
109                CRegistrationPropertySheet PropertySheet;
110                PropertySheet.DoModal(GetActiveWindow());
111        }
112        _ATLCATCH(Exception)
113        {
114                _C(Exception);
115        }
116        return S_OK;
117}
Note: See TracBrowser for help on using the repository browser.