struktur FILE_NETWORK_PHYSICAL_NAME_INFORMATION (ntifs.h)
Struktur FILE_NETWORK_PHYSICAL_NAME_INFORMATION berisi nama jalur fisik UNC lengkap untuk file atau direktori pada berbagi file jarak jauh.
Sintaks
typedef struct _FILE_NETWORK_PHYSICAL_NAME_INFORMATION {
ULONG FileNameLength;
WCHAR FileName[1];
} FILE_NETWORK_PHYSICAL_NAME_INFORMATION, *PFILE_NETWORK_PHYSICAL_NAME_INFORMATION;
Anggota
FileNameLength
Panjangnya, dalam byte, dari nama fisik di FileName.
FileName[1]
Jalur UNC lengkap dari berbagi file jaringan target.
Keterangan
Struktur FILE_NETWORK_PHYSICAL_NAME_INFORMATION digunakan untuk mengambil informasi nama fisik jaringan untuk file. Operasi ini dapat dilakukan dengan salah satu cara berikut:
Panggil ZwQueryInformationFile, meneruskan FileNetworkPhysicalNameInformation sebagai nilai FileInformationClass dan meneruskan buffer yang dialokasikan pemanggil yang diformat sebagai struktur FILE_NETWORK_PHYSICAL_NAME_INFORMATION untuk nilai FileInformation. Parameter FileHandle menentukan target file untuk informasi nama.
Minifilter sistem file harus menggunakan FltQueryInformationFile untuk mengkueri informasi nama fisik.
Buat IRP dengan kode fungsi utama IRP_MJ_QUERY_INFORMATION.
FileNameFILE_NETWORK_PHYSICAL_NAME_INFORMATION akan berisi nama jaringan handel target file yang diteruskan ke ZwQueryInformationFile. Nama jaringan fisik yang dikembalikan dalam format ; X:\Server\ShareName\Dir1\Dir2...\FileName.
Jika nama fisik lebih panjang dari panjang yang diatur di FileNameLength, maka STATUS_BUFFER_OVERFLOW dikembalikan dari ZwQueryInformationFile dan FileNameLength diperbarui dengan jumlah byte yang diperlukan untuk menahan seluruh string nama. Jumlah karakter dalam namanya adalah FileNameLength / sizeof(WCHAR).
Dalam kasus di mana file di-cache pada klien dan nama fisik jaringannya dikueri, jalur yang dikembalikan di FileName mungkin tidak diketahui oleh cache klien. Sistem penembolokan mungkin tidak mengaitkan file yang di-cache dengan file yang dibuka menggunakan jalur yang dikembalikan di FileName.
Berikut ini adalah contoh kueri informasi nama fisik jaringan dari target file menggunakan ZwQueryInformationFile.
NTSTATUS GetPhysicalNetworkName(HANDLE Target, WCHAR *NetworkName, ULONG MaxNetworkNameLength)
{
NTSTATUS Status;
IO_STATUS_BLOCK IoStatus;
ULONG NameInfoLength;
PFILE_NETWORK_PHYSICAL_NAME_INFORMATION NetFileNameInfo = NULL;
if ( MaxNetworkNameLength < sizeof(WCHAR) )
{
return STATUS_NAME_TOO_LONG;
}
if (NetworkName != NULL)
{
return STATUS_INVALID_PARAMETER;
}
NetworkName[0] = (WCHAR)0; // initially terminate the output string;
// set the initial name length, the one WCHAR in NetFileNameInfo.FileName is reserved for the terminating NULL
NameInfoLength = sizeof(PFILE_NETWORK_PHYSICAL_NAME_INFORMATION) +
min(1024, MaxNetworkNameLength - sizeof(WCHAR));
NetFileNameInfo = (PFILE_NETWORK_PHYSICAL_NAME_INFORMATION)ExAllocatePool(PagedPool, NameInfoLength);
if (NetFileNameInfo == NULL)
{
Status = STATUS_NO_MEMORY;
}
else
{
Status = ZwQueryInformationFile(Target,
&IoStatus,
NetFileNameInfo,
NameInfoLength,
FileNetworkPhysicalNameInformation);
}
if (Status == STATUS_BUFFER_OVERFLOW)
{
if (NetFileNameInfo->FileNameLength <= (MaxNetworkNameLength - sizeof(WCHAR)))
{
NameInfoLength += sizeof(PFILE_NETWORK_PHYSICAL_NAME_INFORMATION) + NetFileNameInfo->FileNameLength;
ExFreePool(NetFileNameInfo);
NetFileNameInfo = (PFILE_NETWORK_PHYSICAL_NAME_INFORMATION)ExAllocatePool(PagedPool, NameInfoLength);
if (NetFileNameInfo == NULL)
{
Status = STATUS_NO_MEMORY;
}
else
{
Status = ZwQueryInformationFile(Target,
&IoStatus,
NetFileNameInfo,
NameInfoLength,
FileNetworkPhysicalNameInformation);
}
}
}
if (NetFileNameInfo != NULL)
{
if (NT_SUCCESS(Status))
{
NameInfoLength = min(NameInfoLength, NetFileNameInfo->FileNameLength);
RtlCopyMemory(NetworkName, NetFileNameInfo->FileName, NameInfoLength);
NetworkName[NameInfoLength / sizeof(WCHAR)] = (WCHAR)0;
}
ExFreePool(NetFileNameInfo);
}
return Status;
}
Persyaratan
Persyaratan | Nilai |
---|---|
Header | ntifs.h (termasuk Ntifs.h, Fltkernel.h) |
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk