在发布版本中面临createFile2 API的问题

时间:2016-10-15 03:32:47

标签: c++ winapi visual-studio-2015 uwp

下面的代码适用于调试版本,但发布时createFile2会返回错误代码87,即invalid_parameters。

路径与调试和发布版本相同。

Host_IO::FileRef fileHandle;
#ifdef WIN_UNIVERSAL_ENV
    CREATEFILE2_EXTENDED_PARAMETERS params;
    params.dwFileAttributes = (FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS);
    params.lpSecurityAttributes = 0;
    params.hTemplateFile = 0;
    params.dwFileFlags = 0;
    params.dwSecurityQosFlags = SECURITY_ANONYMOUS;
    fileHandle = CreateFile2((LPCWSTR)wideName.data(), (GENERIC_READ | GENERIC_WRITE), 0, CREATE_ALWAYS, &params);
#else
    fileHandle = CreateFileW ( (LPCWSTR)wideName.data(), (GENERIC_READ | GENERIC_WRITE), 0, 0, CREATE_ALWAYS,
                               (FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS), 0 );
#endif

    if ( fileHandle == INVALID_HANDLE_VALUE ) XMP_Throw ( "Host_IO::Create, cannot create file", kXMPErr_InternalFailure );;

    CloseHandle ( fileHandle );

1 个答案:

答案 0 :(得分:1)

CREATEFILE2_EXTENDED_PARAMETERSdwSize字段开头;您必须将其正确初始化为sizeof (CREATEFILE2_EXTENDED_PARAMETERS),就像所有其他带有dwSize字段的Windows API结构一样。 (你也应该对结构的其余部分进行零初始化,以保证安全。)