Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#include "stock.h"
#pragma hdrstop
// Need to put into separate file because for some reason the /Gy compiler
// option doesn't work.
//
// COM Initialization is weird due to multithreaded apartments.
//
// If this thread has not called CoInitialize yet, but some other thread
// in the process has called CoInitialize with the COINIT_MULTITHREADED,
// then that infects our thread with the multithreaded virus, and a
// COINIT_APARTMENTTHREADED will fail.
//
// In this case, we must turn around and re-init ourselves as
// COINIT_MULTITHREADED to increment the COM refcount on our thread.
// If we didn't do that, and that other thread decided to do a
// CoUninitialize, that >secretly< uninitializes COM on our own thread
// and we fall over and die.
//
STDAPI SHCoInitialize(void) { HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); if (FAILED(hr)) { hr = CoInitializeEx(NULL, COINIT_MULTITHREADED | COINIT_DISABLE_OLE1DDE); } return hr; }
|