Opened 15 months ago
Last modified 15 months ago
#3971 closed Bug
Integer not handled properly when calling object method — at Version 2
Reported by: | BiatuAutMiahn@… | Owned by: | |
---|---|---|---|
Milestone: | Component: | AutoIt | |
Version: | 3.3.14.0 | Severity: | None |
Keywords: | Cc: |
Description (last modified by mLipok)
#include <WinAPIError.au3> Global $oErrorHandler = ObjEvent("AutoIt.Error", "COMErrorHandler") Func COMErrorHandler() ConsoleWrite(_WinAPI_GetLastErrorMessage()&@CRLF) Local $errorDescription = $oErrorHandler.description ConsoleWrite("COM Error occurred: " & @error & @CRLF & "Description: " & $errorDescription) EndFunc $wbemFlagReturnImmediately = 0x10 $wbemFlagForwardOnly = 0x20 $colItems = "" $Output="" $Output = $Output & "Computer: " & $strComputer & @CRLF $Output = $Output & "==========================================" & @CRLF $objWMIService = ObjGet("winmgmts:\\.\root\Microsoft\Windows\Storage") $colItems = $objWMIService.ExecQuery('SELECT * FROM MSFT_Disk', "WQL", _ $wbemFlagReturnImmediately + $wbemFlagForwardOnly) Local $iMBytes=1024*1024 Local $iGBytes=1024*$iMBytes Local $iSizeEfi=512*$iMBytes Local $iSizeMsr=128*$iMBytes Local $iSizeRec=$iGBytes If IsObj($colItems) then For $objItem In $colItems If $objItem.Path<>"\\?\usbstor#disk&ven_iodd&prod__vhdd_gadget_1&rev_#230603390000000092&3#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}" Then ContinueLoop $objItem.Clear(1,1)&@CRLF) $objItem.Initialize(2)&@CRLF) $objItem.Refresh()&@CRLF) $objItem.CreatePartition($iSizeEfi); works $objItem.CreatePartition($iSizeMsr); works $objItem.CreatePartition(2147483647)&@CRLF); Works $objItem.CreatePartition(2147483648)&@CRLF); Fails $objItem.CreatePartition(16*$iGBytes)&@CRLF); Fails ExitLoop Next Else Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "MSFT_Disk" ) Endif Func ConvertSize($iSize, $iPrecision = 2) Local Const $aUnits = StringSplit("|K|M|G|T|P|E|Z|Y",'|',2) Local $iUnit = Int(Log($iSize)/Log(1024)) Return String(Round($iSize / 1024 ^ $iUnit, $iPrecision)) & ' ' & $aUnits[$iUnit] & "B" EndFunc
Calling CreatePartition with any integer greater than 2147483647 fails with Type Mismatch.
Change History (2)
comment:1 Changed 15 months ago by BiatuAutMiahn@…
comment:2 Changed 15 months ago by mLipok
- Description modified (diff)
Note: See
TracTickets for help on using
tickets.
Decided to port to C++, but in the process I ran into an issue where The Size property of MSFT_Disk was being return as a string instead of UInt32 as states in MSFN, eventually I ran into this https://stackoverflow.com/a/20431978, where they mention windows returns a string on purpose, then I had the thought...what if I pass the partition size as a string? Well that did it.