Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
comobj.cpp
Package: shell.rar [view]
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 4k
Category:
Windows Kernel
Development Platform:
Visual C++
- //
- // standard inprocserver DLL code, you should not need to mess with this
- //
- #include "project.h"
- HANDLE g_hInst = NULL;
- LONG g_cRefDll = 0; // Number of locks on this DLL
- STDAPI_(void) DllAddRef()
- {
- InterlockedIncrement(&g_cRefDll);
- }
- STDAPI_(void) DllRelease()
- {
- InterlockedDecrement(&g_cRefDll);
- }
- STDAPI_(BOOL) DllMain(HINSTANCE hInstDll, DWORD fdwReason, LPVOID reserved)
- {
- if (fdwReason == DLL_PROCESS_ATTACH)
- {
- g_hInst = hInstDll;
- }
- return TRUE;
- }
- STDMETHODIMP CSampleClassFactory::QueryInterface(REFIID riid, void **ppvObject)
- {
- if (IsEqualIID(riid, IID_IUnknown) ||
- IsEqualIID(riid, IID_IClassFactory)) {
- *ppvObject = (void *)this;
- AddRef();
- return NOERROR;
- }
- *ppvObject = NULL;
- return E_NOINTERFACE;
- }
- STDMETHODIMP_(ULONG) CSampleClassFactory::AddRef(void)
- {
- DllAddRef();
- return 2;
- }
- STDMETHODIMP_(ULONG) CSampleClassFactory::Release(void)
- {
- DllRelease();
- return 1;
- }
- STDMETHODIMP CSampleClassFactory::CreateInstance(IUnknown *pUnkOuter, REFIID riid, void **ppvObject)
- {
- *ppvObject = NULL;
- if (NULL != pUnkOuter)
- return CLASS_E_NOAGGREGATION;
- CSampleObtainRating *pObj = new CSampleObtainRating; /* doing this does implicit AddRef() */
- if (NULL == pObj)
- return E_OUTOFMEMORY;
- HRESULT hr = pObj->QueryInterface(riid, ppvObject);
- pObj->Release();
- return hr;
- }
- STDMETHODIMP CSampleClassFactory::LockServer(BOOL fLock)
- {
- if (fLock)
- DllAddRef();
- else
- DllRelease();
- return NOERROR;
- }
- //
- // standard COM DLL self registering entry point
- //
- STDAPI DllRegisterServer(void)
- {
- HKEY hkeyCLSID;
- LONG err;
- TCHAR szPath[MAX_PATH];
- // get path to this DLL
- GetModuleFileName(g_hInst, szPath, MAX_PATH);
- /* First register our CLSID under HKEY_CLASSES_ROOT. */
- err = ::RegOpenKey(HKEY_CLASSES_ROOT, "CLSID", &hkeyCLSID);
- if (err == ERROR_SUCCESS) {
- HKEY hkeyOurs;
- err = ::RegCreateKey(hkeyCLSID, ::szOurGUID, &hkeyOurs);
- if (err == ERROR_SUCCESS) {
- HKEY hkeyInproc;
- err = ::RegCreateKey(hkeyOurs, "InProcServer32", &hkeyInproc);
- if (err == ERROR_SUCCESS) {
- err = ::RegSetValueEx(hkeyInproc, NULL, 0, REG_SZ,
- (LPBYTE)szPath, lstrlen(szPath) + 1);
- if (err == ERROR_SUCCESS) {
- err = ::RegSetValueEx(hkeyInproc, "ThreadingModel", 0,
- REG_SZ, (LPBYTE)"Apartment", 10);
- }
- ::RegCloseKey(hkeyInproc);
- }
- ::RegCloseKey(hkeyOurs);
- }
- ::RegCloseKey(hkeyCLSID);
- /* Now install ourselves as a ratings helper. */
- if (err == ERROR_SUCCESS) {
- err = ::RegCreateKey(HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\Policies\Rating Helpers", &hkeyCLSID);
- if (err == ERROR_SUCCESS) {
- err = ::RegSetValueEx(hkeyCLSID, ::szOurGUID, 0, REG_SZ, (LPBYTE)"", 2);
- ::RegCloseKey(hkeyCLSID);
- }
- }
- }
- if (err == ERROR_SUCCESS)
- return S_OK;
- else
- return HRESULT_FROM_WIN32(err);
- }
- //
- // standard COM DLL self registering entry point
- //
- STDAPI DllUnregisterServer(void)
- {
- HKEY hkeyCLSID;
- LONG err;
- err = ::RegOpenKey(HKEY_CLASSES_ROOT, "CLSID", &hkeyCLSID);
- if (err == ERROR_SUCCESS) {
- HKEY hkeyOurs;
- err = ::RegOpenKey(hkeyCLSID, ::szOurGUID, &hkeyOurs);
- if (err == ERROR_SUCCESS) {
- err = ::RegDeleteKey(hkeyOurs, "InProcServer32");
- ::RegCloseKey(hkeyOurs);
- if (err == ERROR_SUCCESS)
- err = ::RegDeleteKey(hkeyCLSID, ::szOurGUID);
- }
- ::RegCloseKey(hkeyCLSID);
- if (err == ERROR_SUCCESS) {
- err = ::RegOpenKey(HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\Policies\Rating Helpers", &hkeyCLSID);
- if (err == ERROR_SUCCESS) {
- err = ::RegDeleteValue(hkeyCLSID, ::szOurGUID);
- ::RegCloseKey(hkeyCLSID);
- }
- }
- }
- if (err == ERROR_SUCCESS)
- return S_OK;
- else
- return HRESULT_FROM_WIN32(err);
- }
- //
- // standard COM DLL entry point
- //
- STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void **ppv)
- {
- if (IsEqualCLSID(rclsid, CLSID_Sample))
- {
- static CSampleClassFactory cf; /* note, declaring this doesn't constitute a reference */
- return cf.QueryInterface(riid, ppv); /* will AddRef() if successful */
- }
- // to make this support more com objects add them here
- *ppv = NULL;
- return CLASS_E_CLASSNOTAVAILABLE;;
- }
- //
- // standard COM DLL entry point
- //
- STDAPI DllCanUnloadNow(void)
- {
- return g_cRefDll == 0 ? S_OK : S_FALSE;
- }