DeviceIoControl return Incorrect function error
-
I am trying to achieve some information about HDD device through following code (pcwszDrive is "\\.\E:")
STDMETHODIMP CheckFileSystem(PCWSTR pcwszDrive)
{
HRESULT hr = S_OK;
HANDLE hDisk = INVALID_HANDLE_VALUE;
ULONG BytesReturned = 0;
FILE_SYSTEM_RECOGNITION_INFORMATION FsRi = { 0 };
//
// Open the target, for example "\\.\C:"
//
TRACE(_T("CreateFile on %s ...\n"), pcwszDrive);
hDisk = CreateFile(pcwszDrive,
FILE_READ_ATTRIBUTES | SYNCHRONIZE | FILE_TRAVERSE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, 0, NULL);
if (hDisk == INVALID_HANDLE_VALUE)
{
hr = HRESULT_FROM_WIN32(GetLastError());
TRACE(_T("CreateFile failed on %s, GLE = 0x%x\n"), pcwszDrive, GetLastError());
goto exit;
}
TRACE(_T("succeeded.\n\n"));
TRACE(_T("\nPress Any Key to send down the FSCTL\n"));
//
// Send down the FSCTL
//
TRACE(_T("Calling DeviceIoControl( FSCTL_QUERY_FILE_SYSTEM_RECOGNITION )\n"));
BOOL fResult = DeviceIoControl(hDisk,
FSCTL_QUERY_FILE_SYSTEM_RECOGNITION,
NULL,
0,
&FsRi,
sizeof(FsRi),
&BytesReturned,
NULL);
if (! fResult)
{
hr = HRESULT_FROM_WIN32(GetLastError());
TRACE(_T("failed GetLastError = 0x%x\n"), GetLastError());
goto exit;
}
TRACE(_T("succeeded.\n"));
TRACE(_T("FSCTL_QUERY_FILE_SYSTEM_RECOGNITION returned success.\n"));
TRACE(_T("FSCTL_QUERY_FILE_SYSTEM_RECOGNITION retrieved \"%S\".\n"), FsRi.FileSystem);exit:
if (hDisk != INVALID_HANDLE_VALUE)
{
CloseHandle(hDisk);
hDisk = INVALID_HANDLE_VALUE;
}return hr;
}
This code is taken from here: Obtaining File System Recognition Information - Win32 apps | Microsoft Docs[^] But at DeviceIoControl method, I got
failed GetLastError = 0x1
which translated means:
ERROR_INVALID_FUNCTION
1 (0x1)
Incorrect function.
My VS2017 run as administrator mode ... what I've done wrong ?