I’m trying to wtite an user-mode application with filter oplock.
NtCreateFile(&file_handle, FILE_READ_ATTRIBUTES, &oa, &iostatus, nullptr, 0, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, FILE_OPEN, FILE_RESERVE_OPFILTER, nullptr, 0);
returns STATUS_SUCCESS.
NtFsControlFile(file_handle, nullptr, nullptr, nullptr, &iostatus, FSCTL_REQUEST_FILTER_OPLOCK, nullptr, 0, nullptr, 0);
returns STATUS_PENDING (success).
and if I call for example:
NtCreateFile(&file_handle, SYNCHRONIZE | FILE_READ_DATA, &oa, &iostatus, nullptr, 0, FILE_SHARE_READ, FILE_OPEN, 0, nullptr, 0);
it rises in an endless cycle. There is only one handle of this file.
I expected to read file and don’t give sharing violation error to other applications. But my application can’t read file too.
What have I done wrong?