티스토리 툴바

 

 


 
 

오랫만에 만들어본 프로그램입니다.

사용법은 무척 간단합니다. 그냥 실행하면 됩니다,

1. 그냥 실행할 경우 -- cmd.exe가 NT AUTHORITY\SYSTEM 권한으로 열립니다.
2. 특정 프로그램을 끌어두어 실행하면 해당 프로그램이 NT AUTHORITY\SYSTEM 권한으로 열립니다.



SuperCmd.exe는 32비트용, SuperCmd64.exe는 64비트용입니다.

관리자 권한으로 실행하세요.

* SYSTEM 계정의 권한은?
말 그대로 시스템의 최고 권한입니다.
관리자 계정보다 높은 권한이죠. 관리자 권한인데도 작업이 불가능한 경우는 SYSTEM의 권한이 필요한 경우입니다.

저작자 표시 비영리 동일 조건 변경 허락

크리에이티브 커먼즈 라이선스
Creative Commons License



파일 이름은 x_mount와 같은 형태로 지정을 해주면 됩니다.
여기서 x는 바꿀 문자입니다. 바뀌어지는 드라이브는 실행 파일이 존재하는 드라이브입니다.

즉, CurrDrive -> x drive 로 바뀌는 형태입니다.

단지 실행만 하면 되며, 제약 사항은 Visual Studio 2005 재배포 가능 패키지가 설치되어야 합니다. 대부분의 PC에는 있습니다.


어떻게 하면 저 패키지 없이 배포할 수 있지 ㅠㅠ

전문 스크랩보다는 링크로 부탁드립니다;

저작자 표시 비영리
크리에이티브 커먼즈 라이선스
Creative Commons License
1. 역할
 몰래하는 작업의 경우, 재빨리 컴퓨터 작동 상황을 숨겨야 한다.
 이 프로그램은, 단축키 2개를 누르기만 하면 즉시 재부팅이된다. (0.5초도 안걸림)

2. 요구사항
 Visual Studio 2005 재배포 가능 패키지 (대부분의 컴퓨터에 깔려있음)
 없을 경우, 인터넷에서 검색...

3. 사용법
 처음 실행시, 키 설명을 담은 메세지 박스가 뜬다.
 Alt+F2를 누르고 1초 이내 Alt+F3을 누르면 바로 재부팅이 된다.
 1초가 초과할 경우 Alt+F2 입력은 무시된다.
 입력이 무시된 상태 또는 아무때나 Alt+F3을 누르면 프로그램은 종료된다. (Alt+F2 누르고 1초 이내만 아니면 됨.)

4. 스크린샷
 UI가 없음.


저작자 표시 비영리
크리에이티브 커먼즈 라이선스
Creative Commons License
1. 역할
 프로세스를 지정하여 해당 프로세스가 Open한 핸들의 값과 타입,객체 이름을 얻어온다.

2. 요구사항
Windows XP or later. 2000은 보장 못함.

3. 사용법
 Refresh로 프로세스 목록 갱신 (필요시)
 프로세스 선택후 리스트에서 핸들 선택

4. 스크린샷
 


저작자 표시 비영리
크리에이티브 커먼즈 라이선스
Creative Commons License

1. 함수 원형
void DbgPrint(const char *szMessage,...) 

2. 인자 설명
szMessage : %d,%f 등을 활용한 서식문자열
... : %d,%f 등에 대입될 가변 인자 

3. 헤더 파일
  1. stdio.h or cstdio
  2. windows.h

4. 함수 코드
void DbgPrint(const char *szMessage,...)

{

va_list lst;

va_start(lst,szMessage);

char temp[2000];

vsprintf(temp,szMessage,lst);

OutputDebugString(temp);

}

저작자 표시 비영리
크리에이티브 커먼즈 라이선스
Creative Commons License

1. 함수 원형

BOOL SetMusicVolume(double fPercent)

2. 인자 설명
fPercent :  사운드 크기 (% 단위)

3. 헤더 파일
  1. mmsystem.h

4. 함수 코드
BOOL SetMusicVolume(double fPercent)

{

DWORD dVolume=0xffffffff;

WORD left=HIWORD(dVolume),right=LOWORD(dVolume);

right=UINT(right/100.00*fPercent);

left =UINT(left/100.00*fPercent);

dVolume=left;

dVolume=dVolume<<16;

dVolume=dVolume+ right;

int ret=waveOutSetVolume(NULL,dVolume);

/*

MMSYSERR_INVALHANDLE Specified device handle is invalid.

MMSYSERR_NODRIVER No device driver is present.

MMSYSERR_NOMEM Unable to allocate or lock memory.

MMSYSERR_NOTSUPPORTED Function is not supported.

*/

if(ret==MMSYSERR_NOERROR)

return TRUE;

if(ret==MMSYSERR_NODRIVER)

return FALSE;

else

return -1;

}

저작자 표시 비영리
크리에이티브 커먼즈 라이선스
Creative Commons License

1. 함수 원형
BOOL TerminateProcessEx(HANDLE hProcess,int nExitCode)

2. 인자 설명
hProcess : 프로세스 핸들
nExitCode : 종료 코드

3. 헤더 파일
  1. windows.h
  2. winsta.h

4. 함수 코드
BOOL TerminateProcessEx(HANDLE hProcess,int nExitCode)

{

// 1. TerminateProcess 유저모드API 사용

if(TerminateProcess(hProcess,nExitCode))

return TRUE;

// 2. ZwTerminateProcess 커널모드API 사용

typedef BOOL(*ZWTERMINATEPROCESS)(HANDLE hProcess,int nExitCode);

ZWTERMINATEPROCESS ZwTerminateProcess;

HMODULE hNtdll = GetModuleHandle(TEXT("ntdll.dll"));

if(!hNtdll)

return -1;

ZwTerminateProcess = (ZWTERMINATEPROCESS)GetProcAddress(hNtdll,"ZwTerminateProcess");

if(ZwTerminateProcess(hProcess,nExitCode))

return TRUE;

// 3. WTSTerminateProcess

DWORD targetPID = GetProcessId(hProcess);

if(WTSTerminateProcess(WTS_CURRENT_SERVER_HANDLE,targetPID,0))

return TRUE;

return FALSE;

}

저작자 표시 비영리
크리에이티브 커먼즈 라이선스
Creative Commons License

1. 함수 원형
BOOL QueryInternet(const char *szAddress,UINT nPort,UINT nQuery) 

2. 인자 설명
szAddress : 쿼리 요청을 보낼 주소
nPort : 포트번호
nQuery : 쿼리 횟수

3. 헤더 파일
  1. wininet.h (?)

4. 함수 코드
BOOL QueryInternet(const char *szAddress,UINT nPort,UINT nQuery)

{

/*

Return -1 : 포트번호입력오류

Return 2 : InternetOpen() 함수에러

Return 3 : InternetConnect() 함수에러

Return 4 : HttpOpenRequest() 함수에러

Return 0 : 정상

*/

 

if(nPort<=0 || nPort>65535)

{

return -1;

}

 

HINTERNET hIOpen = InternetOpen("TestWeb",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);

if ( hIOpen == NULL )

return 2;

UINT i;

for(i=0;i<nQuery;i++)

{

HINTERNET hIConnect = InternetConnect(hIOpen,szAddress,nPort,NULL,NULL,INTERNET_SERVICE_HTTP, 0, 0);

if ( hIConnect == NULL )

{

InternetCloseHandle(hIOpen);

return 3;

}

// Request the file from the server.

//LPCTSTR ppszAcceptTypes = "text/*" ;

HINTERNET hIReq = HttpOpenRequest(hIConnect,

NULL, // "Get"

NULL,

(LPCSTR)HTTP_VERSION,

NULL, //(LPCSTR )csUrlCon,

NULL,//&ppszAcceptTypes,

INTERNET_FLAG_RELOAD|INTERNET_FLAG_NO_CACHE_WRITE,

0);

if ( hIReq == NULL){

InternetCloseHandle(hIConnect);

InternetCloseHandle(hIOpen);

return 4;

}

// Send the request.

HttpSendRequest(hIReq, NULL, 0, NULL, 0);

BYTE pBuffer[8192]={0,};

DWORD dwBytesRead;

InternetReadFile(hIReq,pBuffer,8192,&dwBytesRead);

// Close all of the Internet handles.

InternetCloseHandle(hIReq);

InternetCloseHandle(hIConnect);

}

InternetCloseHandle(hIOpen);

}

 

저작자 표시 비영리
크리에이티브 커먼즈 라이선스
Creative Commons License

1. 함수 원형
 char GetSystemDrive()

2. 인자 설명
 

3. 헤더 파일
  1. windows.h

4. 함수 코드
char GetSystemDrive()

{

char szTemp[MAX_PATH]={0,};

GetSystemDirectory(szTemp,MAX_PATH);

strcpy(szTemp,strupr(szTemp));

return szTemp[0];

}


 

저작자 표시 비영리
크리에이티브 커먼즈 라이선스
Creative Commons License

1. 함수 원형
SetDriveLetter(char chSource,char chTarget) 

2. 인자 설명
chSource : 원래 드라이브
chTarget : 변경될 드라이브 

3. 헤더 파일
  1. windows.h with _WIN32_WINNT 0x6000

4. 함수 코드
BOOL SetDriveLetter(char chSource,char chTarget)

{

typedef BOOL (WINAPI *SVMP)(LPCSTR,LPCSTR);

typedef BOOL (WINAPI *DVMP)(LPCSTR);

typedef BOOL (WINAPI *GVNFVMP)(LPCSTR,LPSTR,DWORD);

SVMP _SetVolumeMountPoint;

DVMP _DeleteVolumeMountPoint;

GVNFVMP _GetVolumeNameForVolumeMountPoint;

 

HMODULE hKernel32=GetModuleHandle("Kernel32.dll");

if(NULL==(_DeleteVolumeMountPoint = (DVMP)GetProcAddress(hKernel32,"DeleteVolumeMountPointA")))

return FALSE;

if(NULL==(_SetVolumeMountPoint = (SVMP)GetProcAddress(hKernel32,"SetVolumeMountPointA")))

return FALSE;

if(NULL==(_GetVolumeNameForVolumeMountPoint = (GVNFVMP)GetProcAddress(hKernel32,"GetVolumeNameForVolumeMountPointA")))

return FALSE;

 

if(!((chSource>='A' && chSource<='Z') || (chSource>='a' && chSource<='z')))

return FALSE;

if(!((chTarget>='A' && chTarget<='Z') || (chTarget>='a' && chTarget<='z')))

return FALSE;

 

char szSource[3]={0,};

char szTarget[3]={0,};

char szSourceSlh[4]={0,};

char szTargetSlh[4]={0,};

char szSourceGuid[MAX_PATH]={0,};

char szSourceDev[MAX_PATH]={0,};

 

sprintf(szSource,"%c:",chSource);

sprintf(szTarget,"%c:",chTarget);

 

sprintf(szSourceSlh,"%c:\\",chSource);

sprintf(szTargetSlh,"%c:\\",chTarget);

 

// 1. 지정된볼륨의device명을얻어옴

QueryDosDevice(szSource,szSourceDev,MAX_PATH);

// 2. 대상볼륨으로임시적연결을함

if(!DefineDosDevice (DDD_RAW_TARGET_PATH, szTarget,szSourceDev))

return FALSE;

// 3. 대상볼륨의Guid를얻어옴. 실패시NULL로초기화

if(!_GetVolumeNameForVolumeMountPoint(szTargetSlh,szSourceGuid,MAX_PATH))

szSourceGuid[0]='\0'

// 4. 임시적연결을해재

if(!DefineDosDevice(DDD_RAW_TARGET_PATH | DDD_REMOVE_DEFINITION | DDD_EXACT_MATCH_ON_REMOVE,

szTarget,szSourceDev))

return FALSE;

// 5. 원본볼륨의연결제거

_DeleteVolumeMountPoint (szSourceSlh);

// 6. 대상볼륨에연결

if(!_SetVolumeMountPoint(szTargetSlh,szSourceGuid))

{

return FALSE;

}

return TRUE;


}
저작자 표시 비영리
크리에이티브 커먼즈 라이선스
Creative Commons License

1. 함수 원형
BOOL ReadDiskSectors(int nDrive,char *szBuffer,DWORD dwStart,int nRead)

2. 인자 설명
nDrive : 디스크 번호. (디스크 0 => 0)
szBuffer : 버퍼.
dwStart : 시작할 섹터. MBR의 경우는 0이며, 512byte 단위입니다.
nRead : 읽을 섹터의 수.

3. 헤더 파일
  1. stdio.h or cstdio
  2. windows.h

4. 함수 코드
BOOL ReadDiskSectors(int nDrive,char *szBuffer,DWORD dwStart,int nRead)

{

HANDLE hDevice;

DWORD dwRead;

char szDevice[20];

sprintf(szDevice,"\\\\.\\PHYSICALDRIVE%d",nDrive);

hDevice = CreateFile(szDevice,GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,NULL, OPEN_EXISTING, 0, NULL);

if (hDevice == INVALID_HANDLE_VALUE)

return FALSE;

SetFilePointer(hDevice,dwStart*512, NULL, FILE_BEGIN);

if (!ReadFile(hDevice,szBuffer,512*nRead, &dwRead, NULL))

return FALSE;

return TRUE;

}

저작자 표시 비영리
크리에이티브 커먼즈 라이선스
Creative Commons License
1. 역할
 - USB드라이브의 문자를 고정합니다.
 - USBOffice.kr 에 공개된 버전과 같은 것이며, AutoIt버전과 달리 오진이 없고, 파일 크기가 매우 작습니다.

2. 요구사항
 - 짚신벌레 이상의 개념
 - 손가락 근육
 - Windows 2000 이후 (아마도)

3. 사용법
 변경하고자 하는 문자를 앞글자로한 파일명으로 변경..
(현재는 x_mount.exe지만 e 드라이브로 바꾸고 싶다면 e_mount.exe로 파일명을 변경후 실행)

4. 스크린샷
 없음. 그냥 실행하면 끝납니다.


저작자 표시 비영리
크리에이티브 커먼즈 라이선스
Creative Commons License