Remember to maintain security and privacy. Do not share sensitive information. Procedimento.com.br may make mistakes. Verify important information. Termo de Responsabilidade

Descubra como Utilizar a Estrutura BY_HANDLE_FILE_INFORMATION no Windows

A estrutura BY_HANDLE_FILE_INFORMATION é uma parte importante da API do Windows, usada para obter informações detalhadas sobre um arquivo específico. Esta estrutura é preenchida pela função GetFileInformationByHandle, que requer um identificador de arquivo válido. Neste artigo, vamos explorar como utilizar essa estrutura para recuperar informações de arquivos no ambiente Windows, usando tanto C++ quanto PowerShell para ilustrar o processo.


O que é BY_HANDLE_FILE_INFORMATION?


BY_HANDLE_FILE_INFORMATION é uma estrutura que contém informações sobre um arquivo, como atributos, datas de criação, tamanho e número de links. Ela é especialmente útil quando você precisa acessar detalhes específicos de um arquivo que não estão diretamente disponíveis através de comandos de linha de comando padrão.


Exemplo em C++


Aqui está um exemplo de como usar a API do Windows em C++ para obter informações sobre um arquivo usando BY_HANDLE_FILE_INFORMATION.


#include <windows.h>
#include <iostream>

void GetFileInformation(const char* filePath) {
HANDLE hFile = CreateFileA(
filePath,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);

if (hFile == INVALID_HANDLE_VALUE) {
std::cerr << "Erro ao abrir o arquivo: " << GetLastError() << std::endl;
return;
}

BY_HANDLE_FILE_INFORMATION fileInfo;
if (GetFileInformationByHandle(hFile, &fileInfo)) {
std::cout << "Tamanho do arquivo: " << fileInfo.nFileSizeLow << " bytes" << std::endl;
std::cout << "Número de links: " << fileInfo.nNumberOfLinks << std::endl;
// Outras informações podem ser extraídas da estrutura fileInfo
} else {
std::cerr << "Erro ao obter informações do arquivo: " << GetLastError() << std::endl;
}

CloseHandle(hFile);
}

int main() {
const char* filePath = "C:\\caminho\\para\\seu\\arquivo.txt";
GetFileInformation(filePath);
return 0;
}

Exemplo em PowerShell


Embora o PowerShell não forneça acesso direto à estrutura BY_HANDLE_FILE_INFORMATION, podemos usar o .NET para acessar funcionalidades semelhantes.


Add-Type -TypeDefinition @"
using System;
using System.IO;
using System.Runtime.InteropServices;

public class FileInformation {
[DllImport("kernel32\.dll", SetLastError = true)]
public static extern bool GetFileInformationByHandle(IntPtr hFile, out BY_HANDLE_FILE_INFORMATION lpFileInformation);

[StructLayout(LayoutKind.Sequential)]
public struct BY_HANDLE_FILE_INFORMATION {
public uint FileAttributes;
public System.Runtime.InteropServices.ComTypes.FILETIME CreationTime;
public System.Runtime.InteropServices.ComTypes.FILETIME LastAccessTime;
public System.Runtime.InteropServices.ComTypes.FILETIME LastWriteTime;
public uint VolumeSerialNumber;
public uint FileSizeHigh;
public uint FileSizeLow;
public uint NumberOfLinks;
public uint FileIndexHigh;
public uint FileIndexLow;
}

public static BY_HANDLE_FILE_INFORMATION GetFileInformation(string filePath) {
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)) {
BY_HANDLE_FILE_INFORMATION fileInfo;
if (!GetFileInformationByHandle(fs.SafeFileHandle.DangerousGetHandle(), out fileInfo)) {
throw new System.ComponentModel.Win32Exception(Marshal.GetLastWin32Error());
}
return fileInfo;
}
}
}
"@

$filePath = "C:\caminho\para\seu\arquivo.txt"
$fileInfo = [FileInformation]::GetFileInformation($filePath)
Write-Output "Tamanho do arquivo: $($fileInfo.FileSizeLow) bytes"
Write-Output "Número de links: $($fileInfo.NumberOfLinks)"

Considerações Finais


A estrutura BY_HANDLE_FILE_INFORMATION é uma ferramenta poderosa para obter informações detalhadas sobre arquivos no Windows. Embora o PowerShell não ofereça acesso direto a essa estrutura, o uso do .NET permite que você acesse funcionalidades semelhantes. Esperamos que este artigo tenha ajudado a entender como utilizar essa estrutura no Windows.


To share Download PDF

Gostou do artigo? Deixe sua avaliação!
Sua opinião é muito importante para nós. Clique em um dos botões abaixo para nos dizer o que achou deste conteúdo.