?? comclient.cpp
字號:
#include <windows.h>
#include <stdio.h>
#include <comdef.h>
#include <conio.h>
#include <atlbase.h>
CComModule _Module;
#include <atlcom.h>
#include "VDSDKComServer.h"
const ULONGLONG g_disk_size = 16;
class CVirtualDrive :
public CComObjectRoot,
public IDispatchImpl<IVirtualDriveHandler3,&__uuidof(IVirtualDriveHandler3)>
{
public:
BEGIN_COM_MAP(CVirtualDrive)
COM_INTERFACE_ENTRY(IVirtualDriveHandler3)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
CVirtualDrive() : m_data(NULL)
{
}
~CVirtualDrive()
{
delete[] m_data;
}
void Init(ULONG diskSize)
{
ULONG sz = diskSize * 1024 * 1024;
m_data = new unsigned char[sz];
memset(m_data,0,sz);
}
STDMETHOD(OnReadData )(ULONGLONG Offset,ULONG Size,UCHAR *Buffer,ULONG *BytesRead)
{
printf("===> OnReadData %d %d\n",(ULONG)Offset,Size);
memcpy(Buffer,m_data+Offset,Size);
*BytesRead = Size;
return S_OK;
}
STDMETHOD(OnWriteData )( ULONGLONG Offset,ULONG Size,UCHAR *Buffer,ULONG *BytesWritten)
{
printf("===> OnWriteData %d %d\n",(ULONG)Offset,Size);
memcpy(m_data+Offset,Buffer, Size);
*BytesWritten = Size;
return S_OK;
}
private:
unsigned char* m_data;
};
bool InstallHandler()
{
CComPtr<IVirtualDrivesManager> pVDSDK;
HRESULT hr;
BOOL result;
LONG driveHandle;
hr = pVDSDK.CoCreateInstance ( __uuidof(VirtualDrivesManager),NULL,CLSCTX_INPROC_SERVER);
if(FAILED(hr))
{
printf("ERROR: unknown interface\n");
return false;
}
// initialize VDSDK
if(FAILED(pVDSDK->InitializeVDSDK(&result)) || result == FALSE)
{
printf("ERROR: can not initialize VDSDK\n");
return false;
}
// create callbacks handlers implementation
CComObject<CVirtualDrive>* pHandler;
hr = CComObject<CVirtualDrive>::CreateInstance(&pHandler);
pHandler->Init(g_disk_size);
if(FAILED(hr))
{
printf("ERROR: can not create CVirtualDrive class instance\n");
return false;
}
// create virtual drive
hr = pVDSDK->CreateVirtualDrive('Z',g_disk_size,pHandler,&driveHandle);
if(FAILED(hr) || driveHandle == -1)
{
printf("Error: can not create virtual drive\n");
return false;
}
printf("VirtualDrive created. Handle = %d\n",driveHandle);
printf("Press any key to quit\n");
getch();
// destroy virtual drive
pVDSDK->DestroyVirtualDrive(driveHandle,TRUE,&result);
// shutdown SDK
pVDSDK->ShutdownVDSDK(TRUE);
return true;
}
int main()
{
::CoInitialize(NULL);
InstallHandler();
::CoUninitialize();
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -