i try say absolute another
… Hmmmm… well, you say wrong. I am not guessing.
i not ask are api completed synchronous or not. this is elementary - based are STATUS_PENDING
No. You are missing the point… and I would recommend you approach asking questions of folks here on the forum with a JUST A BIT more humility. We are working hard to help you, despite it being our holiday and you being a non-native speaker of English.
As Mr. Roberts said, you are confusing the issue by switching your analysis, viewpoint, and questions back and forth from Win32 to the NT Native API. You wrote “here this no matter, Zw api called direct or indirect anyway” – indeed it DOES matter. While it is true that the Native API gets called eventually, your entire issue (it seems to me) is with how Win32 handles the edge cases. If you limit your work to the Native NT API (in user mode or kernel mode, “no matter”) then I think you’ll find things much more clear.
You’re also confusing the case by using what it perhaps one of THE most unusual file system functions in Windows: Directory Change Notification. If you get back STATUS_PENDING from a directory change notification, that effectively grants the request to notify you of the pending change, right? It’s only AFTER there’s a directory change that the request completes (assuming you got back STATUS_PENDING initially).
Byte range locks are another odd case, and I suspect how they behave will vary from file system to file system.
And now I will return to my holiday,
Peter