为金山虚拟光驱扩展浏览器上下文菜单功能

豆豆网   技术应用频道   2007年10月31日  【字号: 收藏本文

内容摘要:本文详述了如何为金山虚拟光驱软件进行浏览器上下文菜单扩展.通过扩展,你可以直接通过鼠标右击虚拟光驱盘符来插入或者弹出虚拟光盘文件,也可以通过右击虚拟光盘文件(*.ISO)来将它直接插入某个虚拟光盘内。

  该函数传入一个指针,函数返回时,指针所指向的缓冲区被另一个指针所填充。该指针通过对虚拟光驱管理器的反汇编代码进行分析可得出它是一个结构的指针,结构的定义象下面这样子(分析结果,也许真正的结构比这个要内容更丰富):

  struct _kvd_entry
  {
    KVD_FUNC_TABLE*  pFuncTable;
    DWORD  dw1;
    DWORD  dw2;
  };

  成员pFuncTable又指向另一个数据结构,它是一个函数指针组:

  struct _kvd_func_table
  {
    void (__stdcall* func0)(KVD_ENTRY*);
    void (__stdcall* Release)(KVD_ENTRY*);
    void (__stdcall* func2)(KVD_ENTRY*);
    void (__stdcall* func3)(KVD_ENTRY*);
    void (__stdcall* func4)(KVD_ENTRY*);
    void (__stdcall* func5)(KVD_ENTRY*);
    HRESULT (__stdcall* AddDriver)(KVD_ENTRY*, DWORD);
    HRESULT (__stdcall* func7)(KVD_ENTRY*, DWORD, DWORD);
    HRESULT (__stdcall* func8)(KVD_ENTRY*, DWORD, DWORD);
    HRESULT (__stdcall* func9)(KVD_ENTRY*, DWORD, DWORD, DWORD);
    HRESULT (__stdcall* InsertDisk)(KVD_ENTRY*, const char*, const char*);
    HRESULT (__stdcall* PopDisk)(KVD_ENTRY*, const char*);
    HRESULT (__stdcall* IsKVD)(KVD_ENTRY*, const char*, DWORD*);
    HRESULT (__stdcall* GetFileNameInDriver)(KVD_ENTRY*, const char*, KVD_BUF*);
    void (__stdcall* func14)(KVD_ENTRY*);
    void (__stdcall* func15)(KVD_ENTRY*);  
  };

责编:豆豆技术应用

正在加载评论...