+ ULONG perms = DELETE;
+ ULONG flags = FILE_NON_DIRECTORY_FILE | FILE_DELETE_ON_CLOSE;
+
+ /* First try opening the file with FILE_DELETE_ON_CLOSE. In most cases,
+ * all we have to do is that plus close the file handle. */
+retry:
+ status = do_create_file(&h, perms, NULL, 0, FILE_OPEN, flags, ctx);
+
+ if (unlikely(status == STATUS_CANNOT_DELETE)) {
+ /* This error occurs for files with FILE_ATTRIBUTE_READONLY set.
+ * Try an alternate approach: first open the file without
+ * FILE_DELETE_ON_CLOSE, then reset the file attributes, then
+ * set the "delete" disposition on the handle. */
+ if (flags & FILE_DELETE_ON_CLOSE) {
+ flags &= ~FILE_DELETE_ON_CLOSE;
+ perms |= FILE_WRITE_ATTRIBUTES;
+ goto retry;
+ }
+ }