AZJIO Posted April 9, 2013 Share Posted April 9, 2013 Want to make a GUI for Ghost.exe with such items: 1:1 L:My_disk 100000 Mb 1:2 L:My_Doc 650000 Mb 2:1 L:Rem 16000 Mb My other projects or all Link to comment Share on other sites More sharing options...
kylomas Posted April 9, 2013 Share Posted April 9, 2013 AZJIO, Does this help? $oWMISvc = ObjGet("winmgmts:\\" & @ComputerName & "\root\cimv2") $colDiskDrives = $oWMISvc.ExecQuery("SELECT * FROM Win32_DiskDrive") For $oDiskDrive In $colDiskDrives ConsoleWrite("DiskDrive = " & $oDiskDrive.DeviceId & " Caption = " & $oDiskDrive.Caption & @LF) $sQuery = "ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" & $oDiskDrive.DeviceId & "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition" $colPartitions = $oWMISvc.ExecQuery($sQuery) For $oPartition In $colPartitions ConsoleWrite(@TAB & "Partition = " & $oPartition.DeviceId & @LF) $sQuery = "ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" & $oPartition.DeviceId & "'} WHERE AssocClass = Win32_LogicalDiskToPartition" $colLogicalDisks = $oWMISvc.ExecQuery($sQuery) For $oLogicalDisk In $colLogicalDisks ConsoleWrite(@TAB & @TAB & "LogicalDisk = " & $oLogicalDisk.DeviceId & @LF) Next Next Next kylomas Forum Rules Procedure for posting code "I like pigs. Dogs look up to us. Cats look down on us. Pigs treat us as equals." - Sir Winston Churchill Link to comment Share on other sites More sharing options...
AZJIO Posted April 9, 2013 Author Share Posted April 9, 2013 Yes, it works, but it is necessary for WinPE where there is no WMI. My other projects or all Link to comment Share on other sites More sharing options...
KaFu Posted April 9, 2013 Share Posted April 9, 2013 using WinAPIEx. OS: Win10-22H2 - 64bit - German, AutoIt Version: 3.3.16.1, AutoIt Editor: SciTE, Website: https://funk.eu AMT - Auto-Movie-Thumbnailer (2024-Oct-13) BIC - Batch-Image-Cropper (2023-Apr-01) COP - Color Picker (2009-May-21) DCS - Dynamic Cursor Selector (2024-Oct-13) HMW - Hide my Windows (2024-Oct-19) HRC - HotKey Resolution Changer (2012-May-16) ICU - Icon Configuration Utility (2018-Sep-16) SMF - Search my Files (2024-Oct-20) - THE file info and duplicates search tool SSD - Set Sound Device (2017-Sep-16) Link to comment Share on other sites More sharing options...
kylomas Posted April 9, 2013 Share Posted April 9, 2013 (edited) AZJIO, thread has the following code which seems to be what you are looking for (note the comment by trancexx concerning the difference between what this return and what WMI reports).Local $aCall = DllCall("kernel32.dll", "dword", "GetLogicalDrives") Local $iMask = $aCall[0] Local $tIOCTL_STORAGE_GET_DEVICE_NUMBER = DllStructCreate("dword DeviceType;" & _ "dword DeviceNumber;" & _ "int PartitionNumber") Local $hDevice Local $a_hCall, $a_iCall For $i = 0 To 25; alphabet (A = 0) If BitAND(BitShift($iMask, $i), 1) Then; drive exists $a_hCall = DllCall("kernel32.dll", "hwnd", "CreateFile", _ "str", "[url="file://\."]\\.\[/url]" & Chr(65 + $i) & ":", _; want handle to the logical drive "dword", 0, _ "dword", 0, _ "ptr", 0, _ "dword", 3, _; OPEN_EXISTING "dword", 128, _; FILE_ATTRIBUTE_NORMAL "ptr", 0) $hDevice = $a_hCall[0] $a_iCall = DllCall("kernel32.dll", "int", "DeviceIoControl", _ "hwnd", $hDevice, _ "dword", 0x2D1080, _; IOCTL_STORAGE_GET_DEVICE_NUMBER "ptr", 0, _ "dword", 0, _ "ptr", DllStructGetPtr($tIOCTL_STORAGE_GET_DEVICE_NUMBER), _ "dword", DllStructGetSize($tIOCTL_STORAGE_GET_DEVICE_NUMBER), _ "dword*", 0, _ "ptr", 0) DllCall("kernel32.dll", "int", "CloseHandle", "hwnd", $hDevice) ConsoleWrite("Drive " & Chr(65 + $i) & ": " & @CRLF) ConsoleWrite(@TAB & "DeviceType: " & DllStructGetData($tIOCTL_STORAGE_GET_DEVICE_NUMBER, "DeviceType") & @CRLF) ConsoleWrite(@TAB & "DeviceNumber: " & DllStructGetData($tIOCTL_STORAGE_GET_DEVICE_NUMBER, "DeviceNumber") & @CRLF) ConsoleWrite(@TAB & "PartitionNumber: " & DllStructGetData($tIOCTL_STORAGE_GET_DEVICE_NUMBER, "PartitionNumber") & @CRLF) ConsoleWrite(@CRLF) EndIf Nextkylomasedit: code is by trancexxedit2: incidentally, trancexx's code (above) agrees with the code that KaFu pointed you to and they are both different from what WMI reports as partition numbers Edited April 9, 2013 by kylomas Forum Rules Procedure for posting code "I like pigs. Dogs look up to us. Cats look down on us. Pigs treat us as equals." - Sir Winston Churchill Link to comment Share on other sites More sharing options...
kylomas Posted April 9, 2013 Share Posted April 9, 2013 (edited) F.W.I.W. - Listview's of various ways of reporting disk properties expandcollapse popup; *** Start added by AutoIt3Wrapper *** #include <GUIConstantsEx.au3> ; *** End added by AutoIt3Wrapper *** #include <Array.au3> #include <WinAPIEx.au3> #include <GUIListView.au3> #AutoIt3Wrapper_Add_Constants=n local $gui010 = guicreate('',300,850) local $aSize = wingetclientsize($gui010) guictrlcreatelabel('Using _WINAPI_GetDriveNumber',10,20,300) guictrlsetfont(-1,9,800,default,'lucinda console') local $lsv010 = guictrlcreatelistview('Disk|Partition|Logical Drive|Type',10,40,$aSize[0]-20,200) guictrlcreatelabel('Using DeviceIoControl method',10,270,300) guictrlsetfont(-1,9,800,default,'lucinda console') local $lsv020 = guictrlcreatelistview('Disk|Partition|Logical Drive|Type',10,290,$aSize[0]-20,200) guictrlcreatelabel('Using WMI method',10,520,300) guictrlsetfont(-1,9,800,default,'lucinda console') local $lsv030 = guictrlcreatelistview('Disk|Partition|Logical Drive|Type',10,540,$aSize[0]-20,200) ;======================================================================================================================================= ; populate listview using _winapi method ;======================================================================================================================================= local $aDRV = drivegetdrive('all') For $1 = 1 to $aDRV[0] $aDRVSTAT = _WinAPI_GetDriveNumber($aDRV[$1]) If Not @error Then if $aDRVSTAT[2] > 10 then $aDRVSTAT[2] = 'N/A' guictrlcreatelistviewitem( $aDRVSTAT[1] & '|' & $aDRVSTAT[2] & '|' & stringupper($aDRV[$1]) & '|' & $aDRVSTAT[0], $lsv010) endif Next ;======================================================================================================================================= ; populate listview using DeviceIoControl method ;======================================================================================================================================= Local $aCall = DllCall("kernel32.dll", "dword", "GetLogicalDrives") Local $iMask = $aCall[0] Local $tIOCTL_STORAGE_GET_DEVICE_NUMBER = DllStructCreate("dword DeviceType;" & _ "dword DeviceNumber;" & _ "int PartitionNumber") Local $hDevice Local $a_hCall, $a_iCall For $i = 0 To 25; alphabet (A = 0) If BitAND(BitShift($iMask, $i), 1) Then; drive exists $a_hCall = DllCall("kernel32.dll", "hwnd", "CreateFile", _ "str", "\\.\" & Chr(65 + $i) & ":", _; want handle to the logical drive "dword", 0, _ "dword", 0, _ "ptr", 0, _ "dword", 3, _; OPEN_EXISTING "dword", 128, _; FILE_ATTRIBUTE_NORMAL "ptr", 0) $hDevice = $a_hCall[0] $a_iCall = DllCall("kernel32.dll", "int", "DeviceIoControl", _ "hwnd", $hDevice, _ "dword", 0x2D1080, _; IOCTL_STORAGE_GET_DEVICE_NUMBER "ptr", 0, _ "dword", 0, _ "ptr", DllStructGetPtr($tIOCTL_STORAGE_GET_DEVICE_NUMBER), _ "dword", DllStructGetSize($tIOCTL_STORAGE_GET_DEVICE_NUMBER), _ "dword*", 0, _ "ptr", 0) DllCall("kernel32.dll", "int", "CloseHandle", "hwnd", $hDevice) guictrlcreatelistviewitem( DllStructGetData($tIOCTL_STORAGE_GET_DEVICE_NUMBER, "DeviceNumber") & '|' & _ DllStructGetData($tIOCTL_STORAGE_GET_DEVICE_NUMBER, "PartitionNumber") & '|' & _ Chr(65 + $i) & '|' & _ DllStructGetData($tIOCTL_STORAGE_GET_DEVICE_NUMBER, "DeviceType"),$lsv020 ) EndIf Next ;======================================================================================================================================= ; populate listview using WMI method ;======================================================================================================================================= local $drv, $part $oWMISvc = ObjGet("winmgmts:\\" & @ComputerName & "\root\cimv2") $colDiskDrives = $oWMISvc.ExecQuery("SELECT * FROM Win32_DiskDrive") For $oDiskDrive In $colDiskDrives $drv = $oDiskDrive.DeviceId ConsoleWrite("DiskDrive = " & $oDiskDrive.DeviceId & " Caption = " & $oDiskDrive.Caption & @LF) $sQuery = "ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" & $oDiskDrive.DeviceId & "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition" $colPartitions = $oWMISvc.ExecQuery($sQuery) For $oPartition In $colPartitions $part = $oPartition.DeviceId ConsoleWrite(@TAB & "Partition = " & $oPartition.DeviceId & @LF) $sQuery = "ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" & $oPartition.DeviceId & "'} WHERE AssocClass = Win32_LogicalDiskToPartition" $colLogicalDisks = $oWMISvc.ExecQuery($sQuery) For $oLogicalDisk In $colLogicalDisks if GUICtrlCreateListViewItem($drv & '|' & $part & '|' & $oLogicalDisk.DeviceId , $lsv030) = 0 then ConsoleWrite('LV create failed' & @LF) ConsoleWrite(@TAB & @TAB & "LogicalDisk = " & $oLogicalDisk.DeviceId & @LF) Next Next Next ;======================================================================================================================================= ; adjust column widths and finish off gui shit ;======================================================================================================================================= for $1 = 0 to _GUICtrlListView_GetColumnCount($lsv010) + 1 _GUICtrlListView_SetColumnWidth($lsv010, $1, $aSize[0]/_GUICtrlListView_GetColumnCount($lsv010)-6) next for $1 = 0 to _GUICtrlListView_GetColumnCount($lsv020) + 1 _GUICtrlListView_SetColumnWidth($lsv020, $1, $aSize[0]/_GUICtrlListView_GetColumnCount($lsv020)-6) next guisetstate() while 1 switch guigetmsg() case $gui_event_close Exit EndSwitch WEnd kylomas Edited April 9, 2013 by kylomas meoit 1 Forum Rules Procedure for posting code "I like pigs. Dogs look up to us. Cats look down on us. Pigs treat us as equals." - Sir Winston Churchill Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now