Sign in to follow this  
Followers 0

Chkdsk project under WinPE

2 posts in this topic

#1 ·  Posted (edited)

Ok I'm starting work on a project that will be automating chkdsk under a Windows PE based enviroment. Since the final project will be open source, I'm inviting people to join the team in helping make it a successful project and once it's developed to a 1.0 stage, it will mostly be bugfixes/corrections from there on out. I have already made a basic GUI that I will attach to the thread later when I'm at the computer I have it saved on.

The goals of the project:

  • Make a functioning GUI that automatically runs chkdsk after drive selections are made
  • Will log all output to a location specified by the user
  • Will give options to choose what options to add to chkdsk, /X /R /F being the three biggest ones.
  • An option to run in multiple passes.
Anyone that is willing to set aside some dedicated time to sit down, discuss best way to proceed, and help with programming will receive credit where due.

Oh and anyone looking to help with bug-testing is welcome as well :oops:

File attached, I had discovered a mockup I made originally as an example to show a possible layout.


Edited by hackersarchangel

Share this post

Link to post
Share on other sites

I Suggest to be a tool is icon and when you press it directly appear gui associated devices that connected to it either hard disk or flash or external hard disk .also gui must to contain bottun for repair pation chkdsk

Share this post

Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  
Followers 0

  • Similar Content

    • ModemJunki
      By ModemJunki
      I'm working in Windows PE environment (10.0.10586). I think I have some permissions issue related to AutoIT
      I've tried with Net Share and with DriveMapAdd - neither work.
      So finally I made the script output a batch file with a pause and what I found is that in WinPE, the batch file behaves differently if it's run at the command prompt or if it is spawned by AutoIT.
      If spawned by AutoIT, the net use command gives error 1231 "The network location cannot be reached". I assume this is the same problem that DriveMapAdd is having.
      But if I run the same batch file under the command shell in the Windows PE instance, it works.
      I also made a simple test with Ping() and it always returns 1 (host is offline) but I can ping it from the command line in the same PE session.
      Are there service dependencies for this to work? What is preventing AutoIT from accessing the network?
      Below sample is kind of dirty but illustrates what I'm doing.
      #RequireAdmin #include <Array.au3> ;~ #include <AutoItConstants.au3> $s_user = "USER" $s_pass = "PASS" _SetUpPEIP() Func _SetUpPEIP() Local $s_RMTIP = "" Local $s_RMTSHR = "SHARED_FOLDER" Local $s_Mapbat = "X:\MapShare.bat" Local $s_IPPrefix = "10.1.1." Local $s_netMask = "" Local $s_StartIP = 20 Local $a_NICs[1] Local $objWMIService = ObjGet("winmgmts:\\localhost\root\CIMV2") Local $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter", "WQL") If IsObj($colItems) Then ; gather network card names For $objItem In $colItems If $objItem.NetConnectionStatus == "2" Or $objItem.NetConnectionStatus == "9" Then _ArrayAdd($a_NICs, $objItem.NetConnectionID) EndIf Next EndIf If IsArray($a_NICs) Then ; assign them I.P. addresses For $i = 1 To UBound($a_NICs) - 1 $s_setIP = "netsh interface IP set address name=""" & $a_NICs[$i] & """ static " & $s_IPPrefix & $i + $s_StartIP - 1 & " " & $s_netMask $s_ipRes = RunWait(@ComSpec & " /c " & $s_setIP, @ScriptDir, @SW_HIDE) ; expect 0 Sleep(100) ConsoleWrite($s_setIP & " result is: " & $s_ipRes & @CRLF) Next ; now map a drive $s_mapDrv = "net use Z: \\" & $s_RMTIP & "\" & $s_RMTSHR & " /user:" & $s_user & " " & $s_pass & " /y" $OpenMapFile = FileOpen($s_Mapbat, 2) FileWriteLine($OpenMapFile, $s_mapDrv) FileWriteLine($OpenMapFile, "pause") FileClose($OpenMapFile) ;~ $s_mapRes = RunWait(@ComSpec & " /c " & $s_Mapbat, @ScriptDir) ; expect 0 $s_mapRes = ShellExecuteWait($s_Mapbat, "", @ScriptDir) ; expect 0 ConsoleWrite("result of " & $s_mapDrv & " is: " & $s_mapRes & " extended code is " & @error & @CRLF) Else ; error! No cards found! EndIf EndFunc ;==>_SetUpPEIP  
    • mdwerne
      By mdwerne
      I'm attempting to cobble together a replacement for the 64bit version of BGInfo that will run within WinPE 10/64. I've located a couple useful threads:
       Between the two, they get me close (see code below), but for some reason GDI+ is not working the same within WinPE as it does in Windows 10. Bottomline is that the "Text" never get's written to WallPaper.
      Here is what I have thus far. Any thoughts if any of the GDI commands might not work within WinPE? Any other way to achieve the same result (system information on the wallpaper in WinPE 10)?
      #include <GDIPlus.au3> #include <Date.au3> _GDIPlus_Startup() $image = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\WallPaper.bmp") $imagegraphics = _GDIPlus_ImageGetGraphicsContext($image) $w = _GDIPlus_ImageGetWidth($image) $h = _GDIPlus_ImageGetHeight($image) $whitebrush = _GDIPlus_BrushCreateSolid(0xFFFFFFFF) $fontfamily = _GDIPlus_FontFamilyCreate("Arial") $font = _GDIPlus_FontCreate($fontfamily, 16) $stringformat = _GDIPlus_StringFormatCreate() _GDIPlus_StringFormatSetAlign($stringformat, 2) $rect = _GDIPlus_RectFCreate(0, $h - $h + 100, $w - 25, $h) ;$rect = _GDIPlus_RectFCreate(100, 100, 200, 200) _GDIPlus_GraphicsDrawStringEx($imagegraphics, _Now() & @CRLF & @UserName & @CRLF & @ComputerName & @CRLF & @IPAddress1, $font, $rect, $stringformat, $whitebrush) _GDIPlus_ImageSaveToFile($image, @ScriptDir & "\NewWallPaper.bmp") _GDIPlus_ImageDispose($image) _GDIPlus_GraphicsDispose($imagegraphics) _GDIPlus_BrushDispose($whitebrush) _GDIPlus_FontFamilyDispose($fontfamily) _GDIPlus_FontDispose($font) _GDIPlus_StringFormatDispose($stringformat) _GDIPlus_Shutdown() _ChangeDesktopWallpaper(@ScriptDir & "\NewWallPaper.bmp", 2) Func _ChangeDesktopWallpaper($bmp, $style = 0) ;=============================================================================== ; ; Function Name: _ChangeDesktopWallPaper ; Description: Update WallPaper Settings ; Usage: _ChangeDesktopWallPaper(@WindowsDir & '\' & 'zapotec.bmp',1) ; Parameter(s): $bmp - Full Path to BitMap File (*.bmp) ; [$style] - 0 = Centered, 1 = Tiled, 2 = Stretched ; Requirement(s): None. ; Return Value(s): On Success - Returns 0 ; On Failure - -1 ; Author(s): FlyingBoz ; Thanks: Larry - DllCall Example - Tested and Working under XPHome and W2K Pro ; Excalibur - Reawakening my interest in Getting This done. ; ;=============================================================================== If Not FileExists($bmp) Then Return -1 ;The $SPI* values could be defined elsewhere via #include - if you conflict, ; remove these, or add if Not IsDeclared "SPI_SETDESKWALLPAPER" Logic Local $SPI_SETDESKWALLPAPER = 20 Local $SPIF_UPDATEINIFILE = 1 Local $SPIF_SENDCHANGE = 2 Local $REG_DESKTOP = "HKEY_CURRENT_USER\Control Panel\Desktop" If $style = 1 Then RegWrite($REG_DESKTOP, "TileWallPaper", "REG_SZ", 1) RegWrite($REG_DESKTOP, "WallpaperStyle", "REG_SZ", 0) Else RegWrite($REG_DESKTOP, "TileWallPaper", "REG_SZ", 0) RegWrite($REG_DESKTOP, "WallpaperStyle", "REG_SZ", $style) EndIf DllCall("user32.dll", "int", "SystemParametersInfo", _ "int", $SPI_SETDESKWALLPAPER, _ "int", 0, _ "str", $bmp, _ "int", BitOR($SPIF_UPDATEINIFILE, $SPIF_SENDCHANGE)) Return 0 EndFunc ;==>_ChangeDesktopWallpaper Thanks for your time,
    • doestergaard
      By doestergaard
      In one of my scripts, I needed to know, where Windows was installed at. I know there is several ways to this already, but I was thinking that I would share how I do it using WMI.
      If anyone has any suggestions or comment on the code, feel free to do so.
      #include <File.au3> Local $STR_DRIVE = GetWindowsDrive() If @error Then MsgBox(@extended, "Result", "Unable to locate Windows", 0) Else MsgBox(@extended, "Result", "Windows is located at: " & $STR_DRIVE, 0) EndIf Exit Func GetWindowsDrive() Local $WMI_GET = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") If Not IsObj($WMI_GET) Then Return SetError(1, 16, 0) Local $WMI_COL_DRIVES = $WMI_GET.ExecQuery("SELECT DeviceID FROM Win32_DiskDrive WHERE MediaType='Fixed hard disk media'") For $WMI_DRIVE In $WMI_COL_DRIVES Local $WMI_COL_PARTITIONS = $WMI_GET.ExecQuery("ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" & $WMI_DRIVE.DeviceID & "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition") For $WMI_PARTITION In $WMI_COL_PARTITIONS Local $WMI_COL_LOGICALDISKS = $WMI_GET.ExecQuery("ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" & $WMI_PARTITION.DeviceID & "'} WHERE AssocClass = Win32_LogicalDiskToPartition") For $WMI_LOGICALDISK In $WMI_COL_LOGICALDISKS If FileExists($WMI_LOGICALDISK.DeviceID & "\Windows\explorer.exe") Then Local $STR_RESULT = $WMI_LOGICALDISK.DeviceID EndIf Next Next Next $WMI_GET = 0 $WMI_COL_DRIVES = 0 $WMI_DRIVE = 0 $WMI_COL_PARTITIONS = 0 $WMI_PARTITION = 0 $WMI_LOGICALDISKS = 0 $WMI_LOGICALDISK = 0 Return SetError(0, 64, $STR_RESULT) EndFunc ; ==>GetWindowsDrive()  
    • guinness
      By guinness