#!perl use Win32API::File qw(:Func :FILE_ :FILE_SHARE_); sub FILE_FLAG_BACKUP_SEMANTICS () { 0x0200_0000 } sub FSCTL_GET_RETRIEVAL_POINTERS () { 0x90073 } my $f = $0; $f =~ s,/,\\,go; # CreateFile->Call # FH, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL; my $fh= createFile( "$f", { Access => 'r', Share => FILE_SHARE_READ, Create => 'e', #Attributes=>"hst", Flags=>FILE_FLAG_BACKUP_SEMANTICS() } ) or die "Can't create file, $0: $^E\n"; my $vcn = 0 ; # virtual cluster number ... my $inBuf = pack ('L2',$vcn,0); # LARGE: Quad hence L2 !!! ; my $outBuf = pack ('L8',0); # ExCount,StartVCN,NextVCN,LCN my $dwByteReturned = 0; # DWORD; printf "Control code: %x\n",FSCTL_GET_RETRIEVAL_POINTERS; DeviceIoControl($fh, FSCTL_GET_RETRIEVAL_POINTERS, $inBuf,length($inBuf), $outBuf,length($outBuf), $dwBytesReturned, []); my $error = Win32::GetLastError(); print "error-no: $error\n"; warn "DeviceIoControl->Call: ", Win32::FormatMessage($error) if ($error); printf "BytesReturned: %u\n",$dwBytesReturned; printf "outBuf %s\n",unpack 'H*',substr($outBuf,0,80); 1;