Initializes WinAPI function pointers
| 1400 | |
| 1401 | //! Initializes WinAPI function pointers |
| 1402 | BOOST_FILESYSTEM_INIT_FUNC init_winapi_func_ptrs() |
| 1403 | { |
| 1404 | boost::winapi::HMODULE_ h = boost::winapi::GetModuleHandleW(L"kernel32.dll"); |
| 1405 | if (BOOST_LIKELY(!!h)) |
| 1406 | { |
| 1407 | GetFileInformationByHandleEx_t* get_file_information_by_handle_ex = boost::winapi::get_proc_address<GetFileInformationByHandleEx_t*>(h, "GetFileInformationByHandleEx"); |
| 1408 | filesystem::detail::atomic_store_relaxed(get_file_information_by_handle_ex_api, get_file_information_by_handle_ex); |
| 1409 | SetFileInformationByHandle_t* set_file_information_by_handle = boost::winapi::get_proc_address<SetFileInformationByHandle_t*>(h, "SetFileInformationByHandle"); |
| 1410 | filesystem::detail::atomic_store_relaxed(set_file_information_by_handle_api, set_file_information_by_handle); |
| 1411 | filesystem::detail::atomic_store_relaxed(create_hard_link_api, boost::winapi::get_proc_address<CreateHardLinkW_t*>(h, "CreateHardLinkW")); |
| 1412 | filesystem::detail::atomic_store_relaxed(create_symbolic_link_api, boost::winapi::get_proc_address<CreateSymbolicLinkW_t*>(h, "CreateSymbolicLinkW")); |
| 1413 | |
| 1414 | if (get_file_information_by_handle_ex && set_file_information_by_handle) |
| 1415 | { |
| 1416 | // Enable the most advanced implementation based on GetFileInformationByHandleEx/SetFileInformationByHandle. |
| 1417 | // If certain flags are not supported by the OS, the remove() implementation will downgrade accordingly. |
| 1418 | filesystem::detail::atomic_store_relaxed(g_remove_impl_type, remove_disp_ex_flag_ignore_readonly); |
| 1419 | } |
| 1420 | } |
| 1421 | |
| 1422 | h = boost::winapi::GetModuleHandleW(L"ntdll.dll"); |
| 1423 | if (BOOST_LIKELY(!!h)) |
| 1424 | { |
| 1425 | filesystem::detail::atomic_store_relaxed(nt_create_file_api, boost::winapi::get_proc_address<NtCreateFile_t*>(h, "NtCreateFile")); |
| 1426 | filesystem::detail::atomic_store_relaxed(nt_query_directory_file_api, boost::winapi::get_proc_address<NtQueryDirectoryFile_t*>(h, "NtQueryDirectoryFile")); |
| 1427 | } |
| 1428 | |
| 1429 | init_directory_iterator_impl(); |
| 1430 | |
| 1431 | return BOOST_FILESYSTEM_INITRETSUCCESS_V; |
| 1432 | } |
| 1433 | |
| 1434 | #if defined(_MSC_VER) |
| 1435 |
no test coverage detected