none
CeMountDBVolEx不成功,总是返回error 87 “ERROR_INVALID_PARAMETER” RRS feed

  • 问题

  • #include "StdAfx.h"
    #include "MountSNDB.h"
    extern "C"
    {
     #include <windbase_edb.h>
    }

    MountSNDB::MountSNDB()
    {
        CREATE_SYSTEMGUID(&my_volGUID);
    }

    MountSNDB::~MountSNDB()
    {
     CREATE_INVALIDGUID(&my_volGUID);
     CeUnmountDBVol(&my_volGUID);
    }

    DWORD ErrorInfo1;
    DWORD ErrorInfo2;

    void MountSNDB::OpenSNDB()
    {
     CEVOLUMEOPTIONS vOptions;
     vOptions.wVersion=1;
     vOptions.dwFlags = CEDB_PASSWORD;
     lstrcpy(vOptions.wszPassword,_T("myDB"));

     if (FALSE == CeMountDBVolEx(&my_volGUID,L"myDB.vol",&vOptions,OPEN_EXISTING))
        {  
             ErrorInfo1 = GetLastError();
      
            if (FALSE == CeMountDBVolEx(&my_volGUID,L"myDB.vol",&vOptions,CREATE_NEW))
            {           
                ErrorInfo2 = GetLastError();
            }

        }
    }

    每次调用的时候,Error1都是87, "ERROR_INVALID_PARAMETER", Error 都是 183, "ERROR_ALREADY_EXISTS "
    我不知道哪个参数有问题。 单步调试的时候,my_volGUID结构体里四个数都是0,这个应该是没错的吧,是用CREATE_SYSTEMGUID(&my_volGUID)生成的。
    第二个参数是文件名,在根目录下,所以我没有加路径,但是我试过加上路径,变成L“\\myDB.vol” ,也还是error87。
    第三个参数核对过,密码是没错的,第四个更不可能错啦,都能找到"#define OPEN_EXISTING       3" .
    求助~~~先谢过啦~~~

    2009年7月25日 6:22

全部回复

  • #include "StdAfx.h"
    #include "MountSNDB.h"
    extern "C"
    {
     #include <windbase_edb.h>
    }

    MountSNDB::MountSNDB()
    {
        CREATE_SYSTEMGUID(&my_volGUID);
    }

    MountSNDB::~MountSNDB()
    {
     CREATE_INVALIDGUID(&my_volGUID);
     CeUnmountDBVol(&my_volGUID);
    }

    DWORD ErrorInfo1;
    DWORD ErrorInfo2;

    补了一行代码SecureZeroMemory(&vOptions,sizeof(CEVOLUMEOPTIONS));

    void MountSNDB::OpenSNDB()
    {
     CEVOLUMEOPTIONS vOptions;
     SecureZeroMemory(&vOptions,sizeof(CEVOLUMEOPTIONS));
     vOptions.wVersion=1;
     vOptions.dwFlags = CEDB_PASSWORD;
     lstrcpy(vOptions.wszPassword,_T("myDB"));

     if (FALSE == CeMountDBVolEx(&my_volGUID,L"myDB.vol",&vOptions,OPEN_EXISTING))
        {  
             ErrorInfo1 = GetLastError();
      
            if (FALSE == CeMountDBVolEx(&my_volGUID,L"myDB.vol",&vOptions,CREATE_NEW))
            {           
                ErrorInfo2 = GetLastError();
            }

        }
    }

    现在还是原来的错,在在调用CeMountDBVolEx的时候,my_volGUID结构体里的参数是四个0,由CREATE_SYSTEMGUID生产。第二个参数就是我的表名。第三个参数除了之前定义的wVersion是1,dwFlags是32,也就是“CEDB_PASSWORD”, wszPassword 是 “myDB”,其他都是0,包括"cbBufferPool","dwAutoShrinkPercent","dwFlushInterval","cMaxNotifyChanges","dwDefaultTimeout". 看起来每个参数都是没问题的呀~~~
    我试了mount pim.vol,把第三个参数变成NULL,就是成功的。看来是第三个参数有点问题,但是真的不明白哪里出了问题。。。。。。

    2009年7月25日 7:10