winfsp unit tests and fixes
This commit is contained in:
parent
0bd1f72017
commit
0903d4b83e
@ -36,8 +36,8 @@ TYPED_TEST(winfsp_test, cr8_attr_can_create_new_file_with_normal_attribute) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr,
|
||||||
FILE_ATTRIBUTE_NORMAL, 0);
|
CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr);
|
||||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
::CloseHandle(handle);
|
::CloseHandle(handle);
|
||||||
|
|
||||||
@ -53,8 +53,8 @@ TYPED_TEST(winfsp_test, cr8_attr_can_create_new_file_with_read_only_attribute) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr,
|
||||||
FILE_ATTRIBUTE_READONLY, 0);
|
CREATE_NEW, FILE_ATTRIBUTE_READONLY, nullptr);
|
||||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
::CloseHandle(handle);
|
::CloseHandle(handle);
|
||||||
|
|
||||||
@ -73,8 +73,8 @@ TYPED_TEST(winfsp_test, cr8_attr_can_create_new_file_with_read_only_attribute) {
|
|||||||
//
|
//
|
||||||
// auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ |
|
// auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ |
|
||||||
// GENERIC_WRITE,
|
// GENERIC_WRITE,
|
||||||
// FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
|
// FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr,
|
||||||
// CREATE_NEW, FILE_ATTRIBUTE_SYSTEM, 0);
|
// CREATE_NEW, FILE_ATTRIBUTE_SYSTEM, nullptr);
|
||||||
// ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
// ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
// ::CloseHandle(handle);
|
// ::CloseHandle(handle);
|
||||||
//
|
//
|
||||||
@ -93,8 +93,8 @@ TYPED_TEST(winfsp_test, cr8_attr_can_create_new_file_with_hidden_attribute) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr,
|
||||||
FILE_ATTRIBUTE_HIDDEN, 0);
|
CREATE_NEW, FILE_ATTRIBUTE_HIDDEN, nullptr);
|
||||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
::CloseHandle(handle);
|
::CloseHandle(handle);
|
||||||
|
|
||||||
@ -112,8 +112,8 @@ TYPED_TEST(winfsp_test, cr8_attr_can_create_always_file_with_normal_attribute) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr,
|
||||||
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
|
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr);
|
||||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
::CloseHandle(handle);
|
::CloseHandle(handle);
|
||||||
|
|
||||||
@ -129,8 +129,8 @@ TYPED_TEST(winfsp_test, cr8_attr_can_create_file_with_read_only_attribute) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr,
|
||||||
CREATE_ALWAYS, FILE_ATTRIBUTE_READONLY, 0);
|
CREATE_ALWAYS, FILE_ATTRIBUTE_READONLY, nullptr);
|
||||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
::CloseHandle(handle);
|
::CloseHandle(handle);
|
||||||
|
|
||||||
@ -150,8 +150,8 @@ TYPED_TEST(winfsp_test, cr8_attr_can_create_file_with_read_only_attribute) {
|
|||||||
//
|
//
|
||||||
// auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ |
|
// auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ |
|
||||||
// GENERIC_WRITE,
|
// GENERIC_WRITE,
|
||||||
// FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
|
// FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr,
|
||||||
// CREATE_ALWAYS, FILE_ATTRIBUTE_SYSTEM, 0);
|
// CREATE_ALWAYS, FILE_ATTRIBUTE_SYSTEM, nullptr);
|
||||||
// ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
// ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
// ::CloseHandle(handle);
|
// ::CloseHandle(handle);
|
||||||
//
|
//
|
||||||
@ -170,8 +170,8 @@ TYPED_TEST(winfsp_test, cr8_attr_can_create_always_file_with_hidden_attribute) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr,
|
||||||
CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, 0);
|
CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, nullptr);
|
||||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
::CloseHandle(handle);
|
::CloseHandle(handle);
|
||||||
|
|
||||||
@ -199,8 +199,8 @@ TYPED_TEST(winfsp_test, cr8_attr_can_handle_read_only_directory) {
|
|||||||
EXPECT_EQ((FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_READONLY), attr);
|
EXPECT_EQ((FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_READONLY), attr);
|
||||||
|
|
||||||
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr,
|
||||||
FILE_ATTRIBUTE_NORMAL, 0);
|
CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr);
|
||||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
::CloseHandle(handle);
|
::CloseHandle(handle);
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ TYPED_TEST(winfsp_test, cr8_nl_can_create_file_of_max_component_length) {
|
|||||||
DWORD max_length{};
|
DWORD max_length{};
|
||||||
EXPECT_TRUE(::GetVolumeInformationA(this->mount_location.c_str(), nullptr,
|
EXPECT_TRUE(::GetVolumeInformationA(this->mount_location.c_str(), nullptr,
|
||||||
0, nullptr, &max_length, nullptr,
|
0, nullptr, &max_length, nullptr,
|
||||||
nullptr, 0));
|
nullptr, nullptr));
|
||||||
EXPECT_EQ(255U, max_length);
|
EXPECT_EQ(255U, max_length);
|
||||||
|
|
||||||
auto file_path = utils::path::combine(this->mount_location,
|
auto file_path = utils::path::combine(this->mount_location,
|
||||||
@ -43,10 +43,10 @@ TYPED_TEST(winfsp_test, cr8_nl_can_create_file_of_max_component_length) {
|
|||||||
std::string(max_length, 'a'),
|
std::string(max_length, 'a'),
|
||||||
});
|
});
|
||||||
|
|
||||||
auto handle =
|
auto handle = ::CreateFileA(
|
||||||
::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW,
|
||||||
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0);
|
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr);
|
||||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
EXPECT_TRUE(::CloseHandle(handle));
|
EXPECT_TRUE(::CloseHandle(handle));
|
||||||
}
|
}
|
||||||
@ -58,7 +58,7 @@ TYPED_TEST(winfsp_test,
|
|||||||
DWORD max_length{};
|
DWORD max_length{};
|
||||||
EXPECT_TRUE(::GetVolumeInformationA(this->mount_location.c_str(), nullptr,
|
EXPECT_TRUE(::GetVolumeInformationA(this->mount_location.c_str(), nullptr,
|
||||||
0, nullptr, &max_length, nullptr,
|
0, nullptr, &max_length, nullptr,
|
||||||
nullptr, 0));
|
nullptr, nullptr));
|
||||||
EXPECT_EQ(255U, max_length);
|
EXPECT_EQ(255U, max_length);
|
||||||
|
|
||||||
auto file_path = utils::path::combine(this->mount_location,
|
auto file_path = utils::path::combine(this->mount_location,
|
||||||
@ -66,10 +66,10 @@ TYPED_TEST(winfsp_test,
|
|||||||
std::string(max_length + 1U, 'a'),
|
std::string(max_length + 1U, 'a'),
|
||||||
});
|
});
|
||||||
|
|
||||||
auto handle =
|
auto handle = ::CreateFileA(
|
||||||
::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW,
|
||||||
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0);
|
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr);
|
||||||
ASSERT_EQ(INVALID_HANDLE_VALUE, handle);
|
ASSERT_EQ(INVALID_HANDLE_VALUE, handle);
|
||||||
EXPECT_EQ(ERROR_INVALID_NAME, ::GetLastError());
|
EXPECT_EQ(ERROR_INVALID_NAME, ::GetLastError());
|
||||||
}
|
}
|
||||||
|
@ -35,8 +35,8 @@ TYPED_TEST(winfsp_test, cr8_file_can_create_file) {
|
|||||||
utils::path::combine(this->mount_location, {"test_file_0"}),
|
utils::path::combine(this->mount_location, {"test_file_0"}),
|
||||||
};
|
};
|
||||||
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr,
|
||||||
FILE_ATTRIBUTE_NORMAL, 0);
|
CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr);
|
||||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
::CloseHandle(handle);
|
::CloseHandle(handle);
|
||||||
}
|
}
|
||||||
@ -46,8 +46,8 @@ TYPED_TEST(winfsp_test, cr8_file_create_new_fails_when_file_exists) {
|
|||||||
utils::path::combine(this->mount_location, {"test_file_0"}),
|
utils::path::combine(this->mount_location, {"test_file_0"}),
|
||||||
};
|
};
|
||||||
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr,
|
||||||
FILE_ATTRIBUTE_NORMAL, 0);
|
CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr);
|
||||||
ASSERT_EQ(INVALID_HANDLE_VALUE, handle);
|
ASSERT_EQ(INVALID_HANDLE_VALUE, handle);
|
||||||
EXPECT_EQ(ERROR_FILE_EXISTS, ::GetLastError());
|
EXPECT_EQ(ERROR_FILE_EXISTS, ::GetLastError());
|
||||||
}
|
}
|
||||||
@ -57,8 +57,8 @@ TYPED_TEST(winfsp_test, cr8_file_can_open_existing_file) {
|
|||||||
utils::path::combine(this->mount_location, {"test_file_0"}),
|
utils::path::combine(this->mount_location, {"test_file_0"}),
|
||||||
};
|
};
|
||||||
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr,
|
||||||
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
|
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);
|
||||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
::CloseHandle(handle);
|
::CloseHandle(handle);
|
||||||
}
|
}
|
||||||
@ -68,8 +68,8 @@ TYPED_TEST(winfsp_test, cr8_file_create_always_succeeds_when_file_exists) {
|
|||||||
utils::path::combine(this->mount_location, {"test_file_0"}),
|
utils::path::combine(this->mount_location, {"test_file_0"}),
|
||||||
};
|
};
|
||||||
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr,
|
||||||
CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, 0);
|
CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, nullptr);
|
||||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
// EXPECT file_size is 0
|
// EXPECT file_size is 0
|
||||||
::CloseHandle(handle);
|
::CloseHandle(handle);
|
||||||
@ -79,15 +79,16 @@ TYPED_TEST(winfsp_test, cr8_file_can_delete_file_after_close) {
|
|||||||
auto file_path{
|
auto file_path{
|
||||||
utils::path::combine(this->mount_location, {"test_file_0"}),
|
utils::path::combine(this->mount_location, {"test_file_0"}),
|
||||||
};
|
};
|
||||||
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
auto handle =
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
|
::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, 0);
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING,
|
||||||
|
FILE_FLAG_DELETE_ON_CLOSE, nullptr);
|
||||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
::CloseHandle(handle);
|
::CloseHandle(handle);
|
||||||
|
|
||||||
handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr,
|
||||||
FILE_FLAG_DELETE_ON_CLOSE, 0);
|
OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, nullptr);
|
||||||
ASSERT_EQ(INVALID_HANDLE_VALUE, handle);
|
ASSERT_EQ(INVALID_HANDLE_VALUE, handle);
|
||||||
EXPECT_EQ(ERROR_FILE_NOT_FOUND, ::GetLastError());
|
EXPECT_EQ(ERROR_FILE_NOT_FOUND, ::GetLastError());
|
||||||
|
|
||||||
@ -101,8 +102,8 @@ TYPED_TEST(winfsp_test,
|
|||||||
}) {
|
}) {
|
||||||
auto handle = ::CreateFileA(
|
auto handle = ::CreateFileA(
|
||||||
(this->mount_location + "\\" + invalid_char + "\\test_file_0").c_str(),
|
(this->mount_location + "\\" + invalid_char + "\\test_file_0").c_str(),
|
||||||
GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
|
GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
|
||||||
CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0);
|
nullptr, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr);
|
||||||
ASSERT_EQ(INVALID_HANDLE_VALUE, handle);
|
ASSERT_EQ(INVALID_HANDLE_VALUE, handle);
|
||||||
if (handle != INVALID_HANDLE_VALUE) {
|
if (handle != INVALID_HANDLE_VALUE) {
|
||||||
std::cout << "char: " << invalid_char << std::endl;
|
std::cout << "char: " << invalid_char << std::endl;
|
||||||
@ -121,8 +122,8 @@ TYPED_TEST(winfsp_test,
|
|||||||
}),
|
}),
|
||||||
};
|
};
|
||||||
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr,
|
||||||
FILE_ATTRIBUTE_NORMAL, 0);
|
CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr);
|
||||||
ASSERT_EQ(INVALID_HANDLE_VALUE, handle);
|
ASSERT_EQ(INVALID_HANDLE_VALUE, handle);
|
||||||
EXPECT_EQ(ERROR_INVALID_NAME, ::GetLastError());
|
EXPECT_EQ(ERROR_INVALID_NAME, ::GetLastError());
|
||||||
}
|
}
|
||||||
@ -153,35 +154,35 @@ TYPED_TEST(winfsp_test, cr8_file_directory_delete_fails_if_not_empty) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr,
|
||||||
FILE_ATTRIBUTE_NORMAL, 0);
|
CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr);
|
||||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
::CloseHandle(handle);
|
::CloseHandle(handle);
|
||||||
|
|
||||||
handle =
|
handle = ::CreateFileA(
|
||||||
::CreateFileA(dir_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
dir_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING,
|
||||||
FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_DELETE_ON_CLOSE, 0);
|
FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_DELETE_ON_CLOSE, nullptr);
|
||||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
::CloseHandle(handle);
|
::CloseHandle(handle);
|
||||||
|
|
||||||
handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr,
|
||||||
FILE_FLAG_DELETE_ON_CLOSE, 0);
|
OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, nullptr);
|
||||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
::CloseHandle(handle);
|
::CloseHandle(handle);
|
||||||
|
|
||||||
handle =
|
handle = ::CreateFileA(
|
||||||
::CreateFileA(dir_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
dir_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING,
|
||||||
FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_DELETE_ON_CLOSE, 0);
|
FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_DELETE_ON_CLOSE, nullptr);
|
||||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
::CloseHandle(handle);
|
::CloseHandle(handle);
|
||||||
|
|
||||||
handle =
|
handle = ::CreateFileA(
|
||||||
::CreateFileA(dir_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
dir_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING,
|
||||||
FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_DELETE_ON_CLOSE, 0);
|
FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_DELETE_ON_CLOSE, nullptr);
|
||||||
ASSERT_EQ(INVALID_HANDLE_VALUE, handle);
|
ASSERT_EQ(INVALID_HANDLE_VALUE, handle);
|
||||||
EXPECT_EQ(ERROR_FILE_NOT_FOUND, ::GetLastError());
|
EXPECT_EQ(ERROR_FILE_NOT_FOUND, ::GetLastError());
|
||||||
}
|
}
|
||||||
|
@ -43,7 +43,7 @@ TYPED_TEST(winfsp_test, delete_directory_fails_if_directory_not_empty) {
|
|||||||
|
|
||||||
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr,
|
||||||
CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0);
|
CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr);
|
||||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
::CloseHandle(handle);
|
::CloseHandle(handle);
|
||||||
|
|
||||||
@ -67,12 +67,12 @@ TYPED_TEST(winfsp_test,
|
|||||||
|
|
||||||
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr,
|
||||||
CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0);
|
CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr);
|
||||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
::CloseHandle(handle);
|
::CloseHandle(handle);
|
||||||
|
|
||||||
handle = ::CreateFileA(file_path.c_str(), DELETE, FILE_SHARE_DELETE, nullptr,
|
handle = ::CreateFileA(file_path.c_str(), DELETE, FILE_SHARE_DELETE, nullptr,
|
||||||
OPEN_EXISTING, 0, 0);
|
OPEN_EXISTING, 0, nullptr);
|
||||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@ -83,7 +83,7 @@ TYPED_TEST(winfsp_test,
|
|||||||
EXPECT_TRUE(::SetFileInformationByHandle(handle, FileDispositionInfo,
|
EXPECT_TRUE(::SetFileInformationByHandle(handle, FileDispositionInfo,
|
||||||
&disp_info, sizeof disp_info));
|
&disp_info, sizeof disp_info));
|
||||||
auto handle2 = ::CreateFileA(file_path.c_str(), FILE_READ_ATTRIBUTES, 0,
|
auto handle2 = ::CreateFileA(file_path.c_str(), FILE_READ_ATTRIBUTES, 0,
|
||||||
nullptr, OPEN_EXISTING, 0, 0);
|
nullptr, OPEN_EXISTING, 0, nullptr);
|
||||||
EXPECT_EQ(INVALID_HANDLE_VALUE, handle2);
|
EXPECT_EQ(INVALID_HANDLE_VALUE, handle2);
|
||||||
EXPECT_EQ(ERROR_ACCESS_DENIED, ::GetLastError());
|
EXPECT_EQ(ERROR_ACCESS_DENIED, ::GetLastError());
|
||||||
|
|
||||||
@ -92,6 +92,32 @@ TYPED_TEST(winfsp_test,
|
|||||||
EXPECT_FALSE(::DeleteFileA(file_path.c_str()));
|
EXPECT_FALSE(::DeleteFileA(file_path.c_str()));
|
||||||
EXPECT_EQ(ERROR_FILE_NOT_FOUND, ::GetLastError());
|
EXPECT_EQ(ERROR_FILE_NOT_FOUND, ::GetLastError());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TYPED_TEST(winfsp_test, delete_can_handle_mmap_after_file_deletion) {
|
||||||
|
auto file_path{
|
||||||
|
utils::path::combine(this->mount_location, {"test_file_3"}),
|
||||||
|
};
|
||||||
|
|
||||||
|
auto handle =
|
||||||
|
::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
|
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW,
|
||||||
|
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr);
|
||||||
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
|
|
||||||
|
auto *mapping =
|
||||||
|
::CreateFileMappingA(handle, nullptr, PAGE_READWRITE, 0,
|
||||||
|
SystemInfo.dwAllocationGranularity, nullptr);
|
||||||
|
EXPECT_TRUE(mapping != nullptr);
|
||||||
|
EXPECT_TRUE(::CloseHandle(handle));
|
||||||
|
|
||||||
|
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr,
|
||||||
|
OPEN_EXISTING, 0, nullptr);
|
||||||
|
EXPECT_EQ(INVALID_HANDLE_VALUE, handle);
|
||||||
|
EXPECT_EQ(ERROR_FILE_NOT_FOUND, ::GetLastError());
|
||||||
|
|
||||||
|
EXPECT_TRUE(::CloseHandle(mapping));
|
||||||
|
}
|
||||||
} // namespace repertory
|
} // namespace repertory
|
||||||
|
|
||||||
#endif // defined(_WIN32)
|
#endif // defined(_WIN32)
|
||||||
|
@ -36,8 +36,8 @@ TYPED_TEST(winfsp_test, info_can_get_tag_info) {
|
|||||||
};
|
};
|
||||||
auto handle =
|
auto handle =
|
||||||
::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW,
|
||||||
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0);
|
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr);
|
||||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
|
|
||||||
FILE_ATTRIBUTE_TAG_INFO tag_info{};
|
FILE_ATTRIBUTE_TAG_INFO tag_info{};
|
||||||
@ -61,8 +61,8 @@ TYPED_TEST(winfsp_test, info_can_get_basic_info) {
|
|||||||
};
|
};
|
||||||
auto handle =
|
auto handle =
|
||||||
::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW,
|
||||||
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0);
|
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr);
|
||||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
|
|
||||||
FILE_BASIC_INFO basic_info{};
|
FILE_BASIC_INFO basic_info{};
|
||||||
@ -91,8 +91,8 @@ TYPED_TEST(winfsp_test, info_can_get_standard_info) {
|
|||||||
};
|
};
|
||||||
auto handle =
|
auto handle =
|
||||||
::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW,
|
||||||
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0);
|
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr);
|
||||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
|
|
||||||
FILE_STANDARD_INFO std_info{};
|
FILE_STANDARD_INFO std_info{};
|
||||||
@ -113,8 +113,8 @@ TYPED_TEST(winfsp_test, info_can_get_file_name_info) {
|
|||||||
};
|
};
|
||||||
auto handle =
|
auto handle =
|
||||||
::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW,
|
||||||
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0);
|
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr);
|
||||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
|
|
||||||
std::array<std::uint8_t, sizeof(FILE_NAME_INFO) + MAX_PATH> name_info{};
|
std::array<std::uint8_t, sizeof(FILE_NAME_INFO) + MAX_PATH> name_info{};
|
||||||
@ -143,8 +143,8 @@ TYPED_TEST(winfsp_test, info_get_file_name_info_buffer_too_small) {
|
|||||||
};
|
};
|
||||||
auto handle =
|
auto handle =
|
||||||
::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW,
|
||||||
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0);
|
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr);
|
||||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
|
|
||||||
std::array<std::uint8_t, sizeof(FILE_NAME_INFO)> name_info{};
|
std::array<std::uint8_t, sizeof(FILE_NAME_INFO)> name_info{};
|
||||||
@ -171,8 +171,8 @@ TYPED_TEST(winfsp_test, info_can_get_file_info) {
|
|||||||
};
|
};
|
||||||
auto handle =
|
auto handle =
|
||||||
::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW,
|
||||||
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0);
|
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr);
|
||||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
|
|
||||||
BY_HANDLE_FILE_INFORMATION file_info{};
|
BY_HANDLE_FILE_INFORMATION file_info{};
|
||||||
@ -217,8 +217,8 @@ TYPED_TEST(winfsp_test, info_can_get_file_path) {
|
|||||||
};
|
};
|
||||||
auto handle =
|
auto handle =
|
||||||
::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW,
|
||||||
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0);
|
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr);
|
||||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
|
|
||||||
std::string final_path;
|
std::string final_path;
|
||||||
@ -245,8 +245,8 @@ TYPED_TEST(winfsp_test, info_can_set_file_info_attributes_to_hidden) {
|
|||||||
};
|
};
|
||||||
auto handle =
|
auto handle =
|
||||||
::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW,
|
||||||
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0);
|
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr);
|
||||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
|
|
||||||
EXPECT_TRUE(::SetFileAttributesA(file_path.c_str(), FILE_ATTRIBUTE_HIDDEN));
|
EXPECT_TRUE(::SetFileAttributesA(file_path.c_str(), FILE_ATTRIBUTE_HIDDEN));
|
||||||
@ -266,8 +266,8 @@ TYPED_TEST(
|
|||||||
};
|
};
|
||||||
auto handle =
|
auto handle =
|
||||||
::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW,
|
||||||
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0);
|
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr);
|
||||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
|
|
||||||
EXPECT_TRUE(::SetFileAttributesA(
|
EXPECT_TRUE(::SetFileAttributesA(
|
||||||
@ -286,8 +286,8 @@ TYPED_TEST(winfsp_test, info_can_set_creation_file_time) {
|
|||||||
};
|
};
|
||||||
auto handle =
|
auto handle =
|
||||||
::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW,
|
||||||
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0);
|
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr);
|
||||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
|
|
||||||
BY_HANDLE_FILE_INFORMATION orig_file_info{};
|
BY_HANDLE_FILE_INFORMATION orig_file_info{};
|
||||||
@ -320,8 +320,8 @@ TYPED_TEST(winfsp_test, info_can_set_accessed_file_time) {
|
|||||||
};
|
};
|
||||||
auto handle =
|
auto handle =
|
||||||
::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW,
|
||||||
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0);
|
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr);
|
||||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
|
|
||||||
BY_HANDLE_FILE_INFORMATION orig_file_info{};
|
BY_HANDLE_FILE_INFORMATION orig_file_info{};
|
||||||
@ -353,8 +353,8 @@ TYPED_TEST(winfsp_test, info_can_set_written_file_time) {
|
|||||||
};
|
};
|
||||||
auto handle =
|
auto handle =
|
||||||
::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW,
|
||||||
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0);
|
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr);
|
||||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
|
|
||||||
BY_HANDLE_FILE_INFORMATION orig_file_info{};
|
BY_HANDLE_FILE_INFORMATION orig_file_info{};
|
||||||
@ -386,8 +386,8 @@ TYPED_TEST(winfsp_test, info_can_set_file_size) {
|
|||||||
};
|
};
|
||||||
auto handle =
|
auto handle =
|
||||||
::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW,
|
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW,
|
||||||
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0);
|
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr);
|
||||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||||
|
|
||||||
auto offset = ::SetFilePointer(handle, 42, nullptr, FILE_BEGIN);
|
auto offset = ::SetFilePointer(handle, 42, nullptr, FILE_BEGIN);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user