我遇到了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进行比较,但它不起作用。
答案 0 :(得分:2)
零是dwFlags
的完全有效值。如果既未设置HANDLE_FLAG_INHERIT
也未设置HANDLE_FLAG_PROTECT_FROM_CLOSE
,则标志将为0。
发生的情况是,GetHandleInformation
函数有两个参数:第一个是文件句柄,第二个是DWORD的指针。如果函数成功,它将使用标志填充第二个参数。在您的情况下,那将是您的dwFlags
变量。如果函数失败,则dwFlags
的值未定义。
函数的返回值是您可能尝试检查零或非零值的函数。非零表示成功,而零(FALSE
)表示失败。这是Win32术语中的BOOL
值。另请注意,如果原始函数调用失败(即,返回GetLastError
),则只能期望FALSE
返回有意义的值。如果原始函数调用成功(即,返回非零值),则不应调用GetLastError
!