如何读取GetHandleInformation函数中的标志

时间:2016-11-27 17:43:00

标签: c winapi

我遇到了GetHandleInformation函数的问题。下面是源代码

#include <windows.h>
#include <stdio.h>

int main()
{
    HANDLE hFile;
    char Nazwa[]="C:\\testfile.txt";
    BOOL test;
    DWORD dFlags;

    hFile=CreateFile(Nazwa,
                    GENERIC_WRITE,
                    FILE_SHARE_WRITE,
                    NULL,
                    CREATE_ALWAYS,
                    FILE_ATTRIBUTE_NORMAL |FILE_ATTRIBUTE_ARCHIVE | SECURITY_IMPERSONATION,
                    NULL);
    if(hFile==INVALID_HANDLE_VALUE)
            printf("Function CreateFile return error: %d\n",GetLastError());

    printf("File handle is OK\n");
    test=GetHandleInformation(hFile,&dFlags);
    //printf("%x\n",dFlags);
    printf("The return value is: %d, error: %d\n",test,GetLastError());
    CloseHandle(hFile);
    DeleteFile(Nazwa);

    return 0;
}

我尝试读取dFlags变量中的标志值,但仍设置为0。 Coul'd有人告诉我哪里有问题。我试图与HANDLE_FLAG_INHERIT或HANDLE_FLAG_PROTECT_FROM_CLOSE进行比较,但它不起作用。

1 个答案:

答案 0 :(得分:2)

零是dwFlags的完全有效值。如果既未设置HANDLE_FLAG_INHERIT也未设置HANDLE_FLAG_PROTECT_FROM_CLOSE,则标志将为0。

发生的情况是,GetHandleInformation函数有两个参数:第一个是文件句柄,第二个是DWORD的指针。如果函数成功,它将使用标志填充第二个参数。在您的情况下,那将是您的dwFlags变量。如果函数失败,则dwFlags的值未定义。

函数的返回值是您可能尝试检查零或非零值的函数。非零表示成功,而零(FALSE)表示失败。这是Win32术语中的BOOL值。另请注意,如果原始函数调用失败(,返回GetLastError),则只能期望FALSE返回有意义的值。如果原始函数调用成功(,返回非零值),则不应调用GetLastError