wil::unique_hfile OpenHandle()

in src/Windows/local_cache.cpp [222:247]


wil::unique_hfile OpenHandle(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes,
    DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile) {
    
    wil::unique_hfile file;
    int i = 0;
    bool retry;

    do {
        file.reset(CreateFile(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes,
            dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile));

		retry = false;
		if (!file && (GetLastError() == ERROR_SHARING_VIOLATION) && (i < MAX_RETRY)) {
			retry = true;
		}

		if (retry)
        {
            Sleep(SLEEP_RETRY_MS);
        }

        i++;
    } while (retry);

    return std::move(file);
}