virusfct.cpp
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 1k
Category:

Windows Kernel

Development Platform:

Visual C++

  1. #include "viruspch.h"
  2. #include "virusmn.h"
  3. #include "virusfct.h"
  4. #include "vrsscan.h"
  5. #include "viruschk.h"
  6. CVirusFactory *pcf;
  7. STDMETHODIMP CVirusFactory::QueryInterface(REFIID riid, void **ppv)
  8. {
  9.    if((riid == IID_IClassFactory) || (riid == IID_IUnknown))
  10.    {
  11.       cRef++;
  12.       *ppv = (void *)this;
  13.       return NOERROR;
  14.    }
  15.    *ppv = NULL;
  16.    return E_NOINTERFACE;
  17. }
  18. STDMETHODIMP_(ULONG) CVirusFactory::AddRef()
  19. {
  20.    return(++cRef);
  21. }
  22. STDMETHODIMP_(ULONG) CVirusFactory::Release()
  23. {
  24.    return(--cRef);
  25. }
  26. STDMETHODIMP CVirusFactory::CreateInstance(IUnknown *pUnkOuter, REFIID riid, void **ppv)
  27. {
  28.    CVirusCheck *vc = NULL;
  29.    IUnknown *punk;
  30.    HRESULT hr;
  31.    vc = new CVirusCheck(pUnkOuter, &punk);
  32.    if(!vc)
  33.       return (E_OUTOFMEMORY);
  34.    if(punk == NULL)
  35.       return CLASS_E_NOAGGREGATION;
  36.    hr = punk->QueryInterface(riid, ppv);
  37.    if(FAILED(hr))
  38.       delete vc;
  39.    else
  40.       DllAddRef();
  41.    
  42.    punk->Release();
  43.    return hr;
  44. }
  45. STDMETHODIMP CVirusFactory::LockServer(BOOL fLock)
  46. {
  47.    if(fLock)
  48.       DllAddRef();
  49.    else
  50.       DllRelease();
  51.    return NOERROR;
  52. }