Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _WIN32_WINNT &h0602
- #include "crt.bi"
- #include "windows.bi"
- #include "win\wintern2.bi"
- #define Fatal() sleep:system
- #define DEBUG_MsgTrace printf
- #if 1 'ndef GetFileInformationByHandleEx
- #define P1 hFile as HANDLE
- #define P2 FileInformationClass as FILE_INFO_BY_HANDLE_CLASS
- #define P3 lpFileInformation as LPVOID
- #define P4 dwBufferSize as DWORD
- function GetFileInformationByHandleEx2(P1, P2, P3, P4) as BOOL export
- dim status as NTSTATUS
- dim io as IO_STATUS_BLOCK
- #define CASE_NOTIMPL _
- FileStreamInfo, FileCompressionInfo, FileAttributeTagInfo, _
- FileRemoteProtocolInfo, FileFullDirectoryInfo, FileFullDirectoryRestartInfo, _
- FileStorageInfo, FileAlignmentInfo, FileIdExtdDirectoryInfo, _
- FileIdExtdDirectoryRestartInfo
- #define CASE_BADPARAM _
- FileRenameInfo, FileDispositionInfo, FileAllocationInfo, _
- FileIoPriorityHintInfo, FileEndOfFileInfo, else
- select case as const FileInformationClass
- case CASE_NOTIMPL
- DEBUG_MsgTrace("%p, %u, %p, %u\n", hFile, FileInformationClass, lpFileInformation, dwBufferSize )
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED)
- return FALSE
- case FileBasicInfo
- status = NtQueryInformationFile(hFile, @io, lpFileInformation, dwBufferSize, FileBasicInformation)
- case FileStandardInfo
- status = NtQueryInformationFile(hFile, @io, lpFileInformation, dwBufferSize, FileStandardInformation)
- case FileNameInfo
- status = NtQueryInformationFile(hFile, @io, lpFileInformation, dwBufferSize, FileNameInformation)
- case FileIdInfo
- status = NtQueryInformationFile(hFile, @io, lpFileInformation, dwBufferSize, FileIdInformation)
- case FileIdBothDirectoryRestartInfo, FileIdBothDirectoryInfo
- status = NtQueryDirectoryFile(hFile, NULL, NULL, NULL, @io, lpFileInformation, dwBufferSize, FileIdBothDirectoryInformation, FALSE, NULL, (FileInformationClass = FileIdBothDirectoryRestartInfo))
- case else 'CASE_BADPARAM
- SetLastError(ERROR_INVALID_PARAMETER)
- return FALSE
- end select
- if status <> STATUS_SUCCESS then
- SetLastError(RtlNtStatusToDosError(status))
- return FALSE
- end if
- return TRUE
- end function
- #endif
- dim as HANDLE hPipeRead,hPipeWrite
- dim as SECURITY_ATTRIBUTES tAttr = (sizeof(SECURITY_ATTRIBUTES),NULL,TRUE)
- if CreatePipe( @hPipeRead , @hPipeWrite , @tAttr , 0 ) = FALSE then
- puts("Failed to create pipe!")
- Fatal()
- end if
- 'var hFile = CreateFile("hardwareview.bas",0,0,0,OPEN_EXISTING,0,0)
- 'print hFile,hPipeWrite
- dim as wstring*MAX_PATH wBuff
- print GetFileInformationByHandleEx2( hPipeWrite , FileNameInfo , @wBuff , sizeof(wBuff) )
- var pTemp = cptr( FILE_NAME_INFORMATION ptr , @wBuff )
- with *pTemp
- print "["+.FileName+"]"
- end with
- sleep
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement