次の方法で共有


FILE_NETWORK_PHYSICAL_NAME_INFORMATION構造体 (ntifs.h)

FILE_NETWORK_PHYSICAL_NAME_INFORMATION 構造体には、リモート ファイル共有上のファイルまたはディレクトリの完全な UNC 物理パス名が含まれています。

構文

typedef struct _FILE_NETWORK_PHYSICAL_NAME_INFORMATION {
  ULONG FileNameLength;
  WCHAR FileName[1];
} FILE_NETWORK_PHYSICAL_NAME_INFORMATION, *PFILE_NETWORK_PHYSICAL_NAME_INFORMATION;

メンバーズ

FileNameLength

FileNameの物理名の長さ (バイト単位)。

FileName[1]

ターゲットのネットワーク ファイル共有の完全な UNC パス。

備考

FILE_NETWORK_PHYSICAL_NAME_INFORMATION 構造体は、ファイルのネットワーク物理名情報を取得するために使用されます。 この操作は、次のいずれかの方法で実行できます。

  • ZwQueryInformationFileを呼び出し、FileNetworkPhysicalNameInformation を FileInformationClass の値として渡し、FileInformationの値の FILE_NETWORK_PHYSICAL_NAME_INFORMATION 構造体として書式設定された呼び出し元割り当てバッファーを渡します。 FileHandle パラメーターは、名前情報のファイル ターゲットを指定します。

    ファイル システムミニフィルターでは、FltQueryInformationFile を使用して、物理名の情報を照会する必要があります。

  • 主要な関数コードを IRP_MJ_QUERY_INFORMATIONIRP を作成します。

FILE_NETWORK_PHYSICAL_NAME_INFORMATIONFileName には、ZwQueryInformationFileに渡されるファイル ターゲット ハンドルのネットワーク名が含まれます。 返される物理ネットワーク名は、の形式です。X:\Server\ShareName\Dir1\Dir2...\FileName.

物理名が FileNameLengthで設定された長さより長い場合、STATUS_BUFFER_OVERFLOWは ZwQueryInformationFile から返され、FileNameLength は名前文字列全体を保持するために必要なバイト数で更新されます。 名前の文字数は、FileNameLength / sizeof(WCHAR)です。

ファイルがクライアントにキャッシュされ、そのネットワーク物理名が照会される場合、FileName で返されるパスがクライアント キャッシュに認識されない可能性があります。 キャッシュ システムは、FileName で返されるパスを使用して、キャッシュされたファイル開いたファイルに関連付けられない場合があります。

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;
}

必要条件

要件 価値
ヘッダー ntifs.h (Ntifs.h、Fltkernel.h を含む)

関連項目

FILE_INFORMATION_CLASS

IRP_MJ_QUERY_INFORMATION

ZwQueryInformationFile