그냥 사는 이야기

WMI의 Win32_Volume::Dismount 실행 해보기 본문

Development/System

WMI의 Win32_Volume::Dismount 실행 해보기

없다캐라 2008. 10. 6. 14:02
반응형
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
    ("Select * From Win32_Volume Where Name = 's:\\'")

For Each objInstance in colItems 
 p_Force = true
 p_Permanent = true

 intResult = objInstance.Dismount(p_Force, p_Permanent)

 WScript.Echo "Result: " & intResult
 

Win32_Volume::Dismount

uint32 Dismount(
  [in] boolean Force = FALSE,
  [in] boolean Permanent = FALSE
);

저기서 Permanent 변수 하나 달랑 보고 참으로 먼 길을 달려갔건만 제대로 실행이 안되네. 자세한건 MSDN의 설명에서 볼 수 있다. WMI의 라이브러리를 실행하는데는 몇 가지 방법이 있겠지만 기본적인 것은 wmic 상에서 실행해보면 된다.

wmic 이 녀석 참 맘에 드는 녀석이다.

이미지에서 보듯이 command창에서 wmic를 입력하면 wmi 명령을 입력받을 수 있는 대화식 모드로 들어간다.

여기서 거의 왠만한 Windows를 다룰 수 있는 명령어를 /? 으로 살펴 본후 각각의 명령을 입력해보고 /? 으로 그 각각의 명령어들 중에서도 필요한 help가 나오고. 꽤 괜찮다. 가끔 어떻게 사용하는지 애매할 때가 있긴 하지만.

script는 잘 모르지만 자꾸 보다 보니 조금 뭔가가 보인다. 간단하고 파워풀하게 활용할 여지가 보인다.

그러나~ Dismount 쪽 코드는 잘 안되는것 같아서 google로 좀 찾아봤더니

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
    ("Select * From Win32_Volume Where Name = 's:\\'")

For Each objInstance in colItems 
 p_Force = true
 p_Permanent = true

 intResult = objInstance.Dismount(p_Force, p_Permanent)

 WScript.Echo "Result: " & intResult

NextDismount(True, True)는 안되는데 위의 방법은 된다. Dismount의 실행 return 값을 볼 수 있도록 되어 있다. 그리고 실제 실행하면 ok. (0번이 return MSDN의 Dismount 부분 참조)

그러나 실제 dismount는 안된다!!! 대체 왜 안될까???

참고

  1. 저 텍스트를 .vbs 파일로 저장해서 그냥 더블클릭으로 실행했다. vbs의 다른 실행 방법이 있나 모르겠지만 그것도 겨우 알게 된거다.
  2. 대부분의 함수들이 Win2003에서 된다. XP, 2000에서는 안되고. 비스타도 안되는걸로 안다. 2008은? 모름. 아마 되겠지?
    그래서 난 2003에서 저 스크립트를 실행해봤지만 안된다. return 값도 0으로 잘 나오는데. 대체 왜~~~~~
Comments