首页
社区
课程
招聘
[原创]一个自动加载和卸载驱动sys文件的工具
发表于: 2008-3-5 16:55 31286

[原创]一个自动加载和卸载驱动sys文件的工具

2008-3-5 16:55
31286
在网上看到一个叫INSTDRV.EXE的工具,公司刚好也要做这方面的工作,没办法,
INSTDRV.EXE无源码,无奈只好自己写了一个,希望对兄弟姐妹有用。

        源码大家可以随便修改使用,如果能在使用时,能不去掉本人的信息,将
深深感谢!

        本程序只在XP专业版SP2上测试过,其它windows版本未测试,如果大家在其它
windows版本上不能用,或者有bug,敬请告知!
        邮箱:        davidfoxhu@sohu.com



////DlgLoaderDlg.cpp
//

/****************************************************************************************\
*
*	在网上看到一个叫INSTDRV.EXE的工具,公司刚好也要做这方面的工作,没办法,
*INSTDRV.EXE无源码,无奈只好自己写了一个,希望对兄弟姐妹有用。
*
*
*	源码大家可以随便修改使用,如果能在使用时,能不去掉本人的信息,将
*深深感谢!
*
*	本程序只在XP专业版SP2上测试过,其它windows版本未测试,如果大家在其它
*windows版本上不能用,或者有bug,敬请告知!
*	邮箱:	davidfoxhu@sohu.com
*
*	胡亚孟		2008-3-5日16:48 于乐港
*
\****************************************************************************************/

#include "stdafx.h"

#include <tchar.h>
#include <windows.h>
#include <winsvc.h>
#include <stdio.h>
#include <winioctl.h>

#include "DlgLoader.h"
#include "DlgLoaderDlg.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#endif


#define				SECURITY_STRING_LEN							168
#define				LG_PAGE_SIZE								4096
#define				MAX_KEY_LENGTH								1024
#define				LG_SLEEP_TIME								4000


const BYTE g_szSecurity[SECURITY_STRING_LEN]=
{
	0x01,0x00,0x14,0x80,0x90,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x02,
	0x00,0x1c,0x00,0x01,0x00,0x00,0x00,0x02,0x80,0x14,0x00,0xff,0x01,0x0f,0x00,0x01,0x01,0x00,0x00,0x00,0x00,
	0x00,0x01,0x00,0x00,0x00,0x00,0x02,0x00,0x60,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0xfd,0x01,0x02,
	0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x05,0x12,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0xff,0x01,0x0f,0x00,
	0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x05,0x20,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x00,0x00,0x14,0x00,0x8d,
	0x01,0x02,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x05,0x0b,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0xfd,0x01,
	0x02,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x05,0x20,0x00,0x00,0x00,0x23,0x02,0x00,0x00,0x01,0x01,0x00,
	0x00,0x00,0x00,0x00,0x05,0x12,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x05,0x12,0x00,0x00,0x00
};


/*******************************************************************************\
*
*	函数及实现
*
\*******************************************************************************/

void PrintLastError(int errorno)
{
#if defined(DEBUG) || defined(_DEBUG)
	LPVOID	lpMsgBuf;

	if(0==errorno)
	{
		errorno=GetLastError();
	}
	FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,NULL,errorno,0,(LPTSTR) &lpMsgBuf,0,NULL);
#ifdef _CONSOLE
	printf("%s\r\n",lpMsgBuf);
#else
	MessageBox(NULL,(LPCTSTR)lpMsgBuf,"错误",MB_OK|MB_TOPMOST);
#endif
	LocalFree(lpMsgBuf);

#endif
}

bool SplitFilePath(const char* szFullPath,char* szPath,char* szFileName,char* szFileExt)
{
	char*	p,*q,*r;
	size_t	len;

	if(NULL==szFullPath)
	{
		return false;
	}
	p=(char*)szFullPath;
	len=strlen(szFullPath);
	if(szPath)
	{
		szPath[0]=0;
	}
	if(szFileName)
	{
		szFileName[0]=0;
	}
	if(szFileExt)
	{
		szFileExt[0]=0;
	}
	q=p+len;
	while(q>p)
	{
		if( *q=='\\' || *q=='/')
		{
			break;
		}
		q--;
	}
	if(q<=p)
	{
		return false;
	}
	if(szPath)
	{
		memcpy(szPath,p,q-p+1);
		szPath[q-p+1]=0;
	}
	q++;
	p=q;
	r=NULL;
	while(*q)
	{
		if(*q=='.')
		{
			r=q;
		}
		q++;
	}
	if(NULL==r)
	{
		if(szFileName)
		{
			memcpy(szFileName,p,q-p+1);
		}
	}
	else
	{
		if(szFileName)
		{
			memcpy(szFileName,p,r-p);
			szFileName[r-p]=0;
		}
		if(szFileExt)
		{
			memcpy(szFileExt,r+1,q-r+1);
		}
	}

	return true;
}

int FindInMultiSz(LPTSTR szMultiSz,int nMultiSzLen,LPTSTR szMatch)
{
	size_t	i,j;
	size_t	len=strlen(szMatch);
	_TCHAR	FirstChar=*szMatch;
	bool	bFound;
	LPTSTR	pTry;

	if( NULL==szMultiSz || NULL==szMatch || nMultiSzLen<=0 )
	{
		return -1;
	}
	for(i=0;i<nMultiSzLen-len;i++)
	{
		if(*szMultiSz++==FirstChar)
		{
			bFound=true;
			pTry=szMultiSz;
			for(j=1;j<=len;j++)
			{
				if(*pTry++!=szMatch[j])
				{
					bFound=false;
					break;
				}
			}
			if(bFound)
			{
				return (int)i;
			}
		}
	}

	return -1;
}

int	InstallDriver(const char* cszDriverName,const char* cszDriverFullPath)
{
	char	szBuf[LG_PAGE_SIZE];
	HKEY	hKey;
	DWORD	dwData;

	if( NULL==cszDriverName || NULL==cszDriverFullPath )
	{
		return -1;
	}
	memset(szBuf,0,LG_PAGE_SIZE);
	strcpy(szBuf,"SYSTEM\\CurrentControlSet\\Services\\");
	strcat(szBuf,cszDriverName);
	if(RegCreateKeyEx(HKEY_LOCAL_MACHINE,szBuf,0,"",0,KEY_ALL_ACCESS,NULL,&hKey,(LPDWORD)&dwData)!=ERROR_SUCCESS)
	{
		return -1;
	}
	strcpy(szBuf,cszDriverName);
	if(RegSetValueEx(hKey,"DisplayName",0,REG_SZ,(CONST BYTE*)szBuf,(DWORD)strlen(szBuf))!=ERROR_SUCCESS)
	{
		return -1;
	}
	dwData=1;
	if(RegSetValueEx(hKey,"ErrorControl",0,REG_DWORD,(CONST BYTE*)&dwData,sizeof(DWORD))!=ERROR_SUCCESS)
	{
		return -1;
	}
	strcpy(szBuf,"\\??\\");
	strcat(szBuf,cszDriverFullPath);
	if(RegSetValueEx(hKey,"ImagePath",0,REG_SZ,(CONST BYTE*)szBuf,(DWORD)strlen(szBuf))!=ERROR_SUCCESS)
	{
		return -1;
	}
	dwData=3;
	if(RegSetValueEx(hKey,"Start",0,REG_DWORD,(CONST BYTE*)&dwData,sizeof(DWORD))!=ERROR_SUCCESS)
	{
		return -1;
	}
	dwData=1;
	if(RegSetValueEx(hKey,"Type",0,REG_DWORD,(CONST BYTE*)&dwData,sizeof(DWORD))!=ERROR_SUCCESS)
	{
		return -1;
	}
	RegFlushKey(hKey);
	RegCloseKey(hKey);
	strcpy(szBuf,"SYSTEM\\CurrentControlSet\\Services\\");
	strcat(szBuf,cszDriverName);
	strcat(szBuf,"\\Security");
	if(RegCreateKeyEx(HKEY_LOCAL_MACHINE,szBuf,0,"",0,KEY_ALL_ACCESS,NULL,&hKey,(LPDWORD)&dwData)!=ERROR_SUCCESS)
	{
		return -1;
	}
	dwData=SECURITY_STRING_LEN;
	if(RegSetValueEx(hKey,"Security",0,REG_BINARY,g_szSecurity,dwData)!=ERROR_SUCCESS)
	{
		return -1;
	}
	RegFlushKey(hKey);
	RegCloseKey(hKey);

	return 0;
}

int CreateDriver(const char* cszDriverName,const char* cszDriverFullPath)
{
	SC_HANDLE		schManager;
	SC_HANDLE		schService;
	SERVICE_STATUS	svcStatus;
	bool			bStopped=false;
	int				i;

	if( NULL==cszDriverName || NULL==cszDriverFullPath )
	{
		return -1;
	}
	schManager=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
	if(NULL==schManager)
	{
		return -1;
	}
	schService=OpenService(schManager,cszDriverName,SERVICE_ALL_ACCESS);
	if(NULL!=schService)
	{
		if(ControlService(schService,SERVICE_CONTROL_INTERROGATE,&svcStatus))
		{
			if(svcStatus.dwCurrentState!=SERVICE_STOPPED)
			{
				if(0==ControlService(schService,SERVICE_CONTROL_STOP,&svcStatus))
				{
					CloseServiceHandle(schService);
					CloseServiceHandle(schManager);
					return -1;
				}
				for(i=0;i<10;i++)
				{
					if( ControlService(schService,SERVICE_CONTROL_INTERROGATE,&svcStatus)==0 || svcStatus.dwCurrentState==SERVICE_STOPPED )
					{
						bStopped=true;
						break;
					}
					Sleep(LG_SLEEP_TIME);
				}
				if(!bStopped)
				{
					CloseServiceHandle(schService);
					CloseServiceHandle(schManager);
					return -1;
				}
			}
		}
		CloseServiceHandle(schService);
		CloseServiceHandle(schManager);
		return 0;
	}
	schService=CreateService(schManager,cszDriverName,cszDriverName,SERVICE_ALL_ACCESS,SERVICE_KERNEL_DRIVER,SERVICE_SYSTEM_START,SERVICE_ERROR_NORMAL,cszDriverFullPath,NULL,NULL,NULL,NULL,NULL);
	if(NULL==schService)
	{
		CloseServiceHandle(schManager);
		return -1;
	}
	CloseServiceHandle(schService);
	CloseServiceHandle(schManager);

	return 0;
}

int StartDriver(const char* cszDriverName,const char* cszDriverFullPath)
{
	SC_HANDLE		schManager;
	SC_HANDLE		schService;
	SERVICE_STATUS	svcStatus;
	bool			bStarted=false;
	int				i;

	if(NULL==cszDriverName)
	{
		return -1;
	}
	if(CreateDriver(cszDriverName,cszDriverFullPath)<0)
	{
		return -1;
	}
	schManager=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
	if(NULL==schManager)
	{
		return -1;
	}
	schService=OpenService(schManager,cszDriverName,SERVICE_ALL_ACCESS);
	if(NULL==schService)
	{
		CloseServiceHandle(schManager);
		return -1;
	}
	if(ControlService(schService,SERVICE_CONTROL_INTERROGATE,&svcStatus))
	{
		if(svcStatus.dwCurrentState==SERVICE_RUNNING)
		{
			CloseServiceHandle(schService);
			CloseServiceHandle(schManager);
			return 0;
		}
	}
	else if(GetLastError()!=ERROR_SERVICE_NOT_ACTIVE)
	{
		CloseServiceHandle(schService);
		CloseServiceHandle(schManager);
		return -1;
	}
	if(0==StartService(schService,0,NULL))
	{
		CloseServiceHandle(schService);
		CloseServiceHandle(schManager);
		PrintLastError(0);
		return -1;
	}
	for(i=0;i<10;i++)
	{
		if( ControlService(schService,SERVICE_CONTROL_INTERROGATE,&svcStatus) && svcStatus.dwCurrentState==SERVICE_RUNNING )
		{
			bStarted=true;
			break;
		}
		Sleep(LG_SLEEP_TIME);
	}
	CloseServiceHandle(schService);
	CloseServiceHandle(schManager);

	return bStarted?0:-1;
}

int StopDriver(const char* cszDriverName,const char* cszDriverFullPath)
{
	SC_HANDLE		schManager;
	SC_HANDLE		schService;
	SERVICE_STATUS	svcStatus;
	bool			bStopped=false;
	int				i;

	schManager=OpenSCManager(NULL,0,0);
	if(NULL==schManager)
	{
		return -1;
	}
	schService=OpenService(schManager,cszDriverName,SERVICE_ALL_ACCESS);
	if(NULL==schService)
	{
		CloseServiceHandle(schManager);
		return -1;
	}
	if(ControlService(schService,SERVICE_CONTROL_INTERROGATE,&svcStatus))
	{
		if(svcStatus.dwCurrentState!=SERVICE_STOPPED)
		{
			if(0==ControlService(schService,SERVICE_CONTROL_STOP,&svcStatus))
			{
				CloseServiceHandle(schService);
				CloseServiceHandle(schManager);
				return -1;
			}
			for(i=0;i<10;i++)
			{
				if( ControlService(schService,SERVICE_CONTROL_INTERROGATE,&svcStatus)==0 || svcStatus.dwCurrentState==SERVICE_STOPPED )
				{
					bStopped=true;
					break;
				}
				Sleep(LG_SLEEP_TIME);
			}
			if(!bStopped)
			{
				CloseServiceHandle(schService);
				CloseServiceHandle(schManager);
				return -1;
			}
		}
	}
	CloseServiceHandle(schService);
	CloseServiceHandle(schManager);

	return 0;
}

int DeleteDriver(const char* cszDriverName,const char* cszDriverFullPath)
{
	SC_HANDLE		schManager;
	SC_HANDLE		schService;
	SERVICE_STATUS	svcStatus;

	schManager=OpenSCManager(NULL,0,0);
	if(NULL==schManager)
	{
		return -1;
	}
	schService=OpenService(schManager,cszDriverName,SERVICE_ALL_ACCESS);
	if(NULL==schService)
	{
		CloseServiceHandle(schManager);
		return -1;
	}
	ControlService(schService,SERVICE_CONTROL_STOP,&svcStatus);
	if(0==DeleteService(schService))
	{
		CloseServiceHandle(schService);
		CloseServiceHandle(schManager);
		return -1;
	}
	CloseServiceHandle(schService);
	CloseServiceHandle(schManager);

	return 0;
}

LONG RegDeleteKeyNT(HKEY hStartKey,LPTSTR pKeyName)
{
	DWORD	dwSubKeyLength;
	LPTSTR	pSubKey=NULL;
	TCHAR	szSubKey[MAX_KEY_LENGTH];
	HKEY	hKey;
	LONG	lRet;

	if( pKeyName && lstrlen(pKeyName) )
	{
		if((lRet=RegOpenKeyEx(hStartKey,pKeyName,0,KEY_ENUMERATE_SUB_KEYS|DELETE,&hKey))==ERROR_SUCCESS)
		{
			while(lRet==ERROR_SUCCESS)
			{
				dwSubKeyLength=MAX_KEY_LENGTH;
				lRet=RegEnumKeyEx(hKey,0,szSubKey,(LPDWORD)&dwSubKeyLength,NULL,NULL,NULL,NULL);
				if(lRet==ERROR_NO_MORE_ITEMS)
				{
					lRet=RegDeleteKey(hStartKey,pKeyName);
					break;
				}
				else if(lRet==ERROR_SUCCESS)
				{
					lRet=RegDeleteKeyNT(hKey,szSubKey);
				}
			}
			RegCloseKey(hKey);
		}
	}
	else
	{
		lRet=ERROR_BADKEY;
	}

	return lRet;
}

int RemoveDriver(const char* cszDriverName,const char* cszDriverFullPath)
{
	HKEY hKey;
	long errorno;
	char szBuf[LG_PAGE_SIZE];
	char szDriverName[MAX_PATH];

	memset(szBuf,0,LG_PAGE_SIZE);
	memset(szDriverName,0,MAX_PATH);
	strcpy(szDriverName,cszDriverName);
	strcpy(szBuf,"SYSTEM\\CurrentControlSet\\Services\\");
	if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,szBuf,0,KEY_ALL_ACCESS,&hKey)!=ERROR_SUCCESS)
	{
		return -1;
	}
	if((errorno=RegDeleteKeyNT(hKey,szDriverName))!=ERROR_SUCCESS)
	{
		return -1;
	}
	RegCloseKey(hKey);

	return 0;
}

/*******************************************************************************\
*
*	CDlgLoaderDlg 对话框
*
\*******************************************************************************/
CDlgLoaderDlg::CDlgLoaderDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CDlgLoaderDlg::IDD, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CDlgLoaderDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_EDIT_FULLPATH, m_editFullPath);
	DDX_Control(pDX, IDC_STATIC_STATUS, m_staticStatus);
}

BEGIN_MESSAGE_MAP(CDlgLoaderDlg, CDialog)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	//}}AFX_MSG_MAP
	ON_BN_CLICKED(ID_SETUP, OnBnClickedSetup)
	ON_BN_CLICKED(ID_START, OnBnClickedStart)
	ON_BN_CLICKED(ID_STOP, OnBnClickedStop)
	ON_BN_CLICKED(ID_REMOVE, OnBnClickedRemove)
	ON_BN_CLICKED(IDC_BUTTON_BROWSER, OnBnClickedButtonBrowser)
END_MESSAGE_MAP()


// CDlgLoaderDlg 消息处理程序
BOOL CDlgLoaderDlg::OnInitDialog()
{
	int cx;
	int cy;

	CDialog::OnInitDialog();
	SetIcon(m_hIcon, TRUE);
	SetIcon(m_hIcon, FALSE);
	ShowWindow(SW_SHOWNORMAL);
	cx=GetSystemMetrics(SM_CXFULLSCREEN);
	cy=GetSystemMetrics(SM_CYFULLSCREEN);
	SetWindowPos(&CWnd::wndNoTopMost,cx/2-160,cy/2-100,0,0,SWP_NOSIZE|SWP_SHOWWINDOW);

	return TRUE;
}

void CDlgLoaderDlg::OnPaint() 
{
	if(IsIconic())
	{
		CPaintDC dc(this);

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		dc.DrawIcon(x,y,m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

HCURSOR CDlgLoaderDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}

void CDlgLoaderDlg::OnBnClickedSetup()
{
	m_editFullPath.GetWindowText(m_szDriverFullPath,MAX_PATH);
	if(strlen(m_szDriverFullPath)<=0)
	{
		AfxMessageBox("请输入文件全路径!");
		return;
	}
	SplitFilePath(m_szDriverFullPath,m_szDriverPath,m_szDriverName,m_szDriverExt);
	if(0>InstallDriver(m_szDriverName,m_szDriverFullPath))
	{
		m_staticStatus.SetWindowText("安装驱动失败!");
		PrintLastError(0);
		return;
	}
	m_staticStatus.SetWindowText("成功安装驱动!");
}

void CDlgLoaderDlg::OnBnClickedStart()
{
	m_editFullPath.GetWindowText(m_szDriverFullPath,MAX_PATH);
	if(strlen(m_szDriverFullPath)<=0)
	{
		AfxMessageBox("请输入文件全路径!");
		return;
	}
	SplitFilePath(m_szDriverFullPath,m_szDriverPath,m_szDriverName,m_szDriverExt);
	if(0>StartDriver(m_szDriverName,m_szDriverFullPath))
	{
		m_staticStatus.SetWindowText("启动驱动服务失败!");
		PrintLastError(0);
		return;
	}
	m_staticStatus.SetWindowText("成功启动驱动服务!");
}

void CDlgLoaderDlg::OnBnClickedStop()
{
	m_editFullPath.GetWindowText(m_szDriverFullPath,MAX_PATH);
	if(strlen(m_szDriverFullPath)<=0)
	{
		AfxMessageBox("请输入文件全路径!");
		return;
	}
	SplitFilePath(m_szDriverFullPath,m_szDriverPath,m_szDriverName,m_szDriverExt);
	if(0>StopDriver(m_szDriverName,m_szDriverFullPath))
	{
		m_staticStatus.SetWindowText("无法停止驱动服务!");
		PrintLastError(0);
		return;
	}
	m_staticStatus.SetWindowText("成功停止驱动服务!");
}

void CDlgLoaderDlg::OnBnClickedRemove()
{
	m_editFullPath.GetWindowText(m_szDriverFullPath,MAX_PATH);
	if(strlen(m_szDriverFullPath)<=0)
	{
		AfxMessageBox("请输入文件全路径!");
		return;
	}
	SplitFilePath(m_szDriverFullPath,m_szDriverPath,m_szDriverName,m_szDriverExt);
	StopDriver(m_szDriverName,m_szDriverFullPath);
	if(0>RemoveDriver(m_szDriverName,m_szDriverFullPath))
	{
		m_staticStatus.SetWindowText("卸载驱动失败!");
		PrintLastError(0);
		return;
	}
	m_staticStatus.SetWindowText("成功卸载驱动!");
}

void CDlgLoaderDlg::OnBnClickedButtonBrowser()
{
	OPENFILENAME	ofn;
	char			szFileName[MAX_PATH];
	char			lpstrFilter[]="SYS文件 (*.sys)\0*.sys\0所有文件 (*.*)\0*.*\0\0";

	ZeroMemory(szFileName,MAX_PATH);
	ZeroMemory(&ofn, sizeof(OPENFILENAME));
	ofn.lStructSize		= sizeof(OPENFILENAME);
	ofn.hwndOwner		= m_hWnd;
	ofn.lpstrFile		= (LPSTR)szFileName;
	ofn.nMaxFile		= sizeof(szFileName);
	ofn.lpstrFilter		=(LPCSTR)lpstrFilter;
	ofn.nFilterIndex	= 0;
	ofn.lpstrFileTitle	= NULL;
	ofn.nMaxFileTitle	= 0;
	ofn.lpstrInitialDir = NULL;
	ofn.Flags			= OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST;
	if(GetOpenFileName(&ofn)==FALSE)
	{
		return;
	}
	m_editFullPath.SetWindowText(szFileName);
	m_staticStatus.SetWindowText("打开文件操作成功!");
	ZeroMemory(m_szDriverName,MAX_PATH);
	ZeroMemory(m_szDriverFullPath,MAX_PATH);
	strcpy(m_szDriverFullPath,szFileName);
	SplitFilePath(m_szDriverFullPath,m_szDriverPath,m_szDriverName,m_szDriverExt);
}

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (20)
雪    币: 215
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
绝好的东西啊

研究下
2008-3-5 22:21
0
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
3
本想帮你测试,无奈不懂CPP
2008-3-5 22:25
0
雪    币: 173
活跃值: (2221)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cwx
4
楼主能否上传一个编译版
或那位大虾可以编译一下呀
2008-3-6 01:50
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
5
就是写注册表,然后创建服务。

原理很简单
2008-3-6 06:47
0
雪    币: 647
活跃值: (564)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
6
KmdKit 中有个带源码的KmdManager
2008-3-6 08:37
0
雪    币: 2559
活跃值: (176)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
7
编译了一下,发个exe文件!
上传的附件:
2008-3-6 09:10
0
雪    币: 2559
活跃值: (176)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
8
本想把ddk部分的挂ssdt,int 2e,hook pe的代码奉上,看见自己上下都加精了,估计送上也没有,算了!
2008-3-6 17:16
0
雪    币: 173
活跃值: (2221)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cwx
9
谢谢,好像不支持直接拖拽(拖放)文件的
希望可以再改进一下,如把安装、停止合成一个按钮,启动、删除合成一个按钮。
界面上再添加一些自定义选项的话。。
sc create [service name] [binPath= ] <option1> <option2>...
CREATE OPTIONS:
NOTE: The option name includes the equal sign.
type= <own|share|interact|kernel|filesys|rec>
       (default = own)
start= <boot|system|auto|demand|disabled>
       (default = demand)
error= <normal|severe|critical|ignore>
       (default = normal)
binPath= <BinaryPathName>
group= <LoadOrderGroup>
tag= <yes|no>
depend= <Dependencies(separated by / (forward slash))>
obj= <AccountName|ObjectName>
       (default = LocalSystem)
DisplayName= <display name>
password= <password>
2008-3-6 23:30
0
雪    币: 2559
活跃值: (176)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
10
收到,等有时间在修改,现在实在没时间,公司工作太忙!
2008-3-7 11:11
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
看看在说哦
2008-3-8 17:06
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
多谢分享,
我直接用了服务API启了个服务
都是注册表操作的方法
大牛们加的时候都是直接上
希望大牛指点
2008-3-13 09:28
0
雪    币: 1946
活跃值: (243)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
13
codeproject上现成的
2008-3-13 17:01
0
雪    币: 25
活跃值: (477)
能力值: (RANK:20 )
在线值:
发帖
回帖
粉丝
14
垃圾             
2008-3-13 18:10
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
研究研究
2008-7-13 12:34
0
雪    币: 280
活跃值: (294)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
还以为啥高技术东西呢。一看看。就是哪个样。
2008-7-20 18:28
0
雪    币: 7725
活跃值: (2462)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
多谢分享,?????????
2008-7-21 19:12
0
雪    币: 29
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
谢谢谢谢阿啊
2008-7-24 10:06
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
要做就做得好点,使用了之后删除服务根本不成功,害的我弄了n次才搞定,
发出的源代码还把vc7的转换文件弄丢了,一直使用vc6想转换也不成,既然是源代码就得能让人看 ,
2008-9-30 21:14
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
要做就做得好点,使用了之后删除服务根本不成功,害的我弄了n次才搞定,
发出的源代码还把vc7的转换文件弄丢了,一直使用vc6想转换也不成,既然是源代码就得能让人看 ,
2008-9-30 21:28
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xyu
21
下载了,确实无用!
2008-10-1 12:26
0
游客
登录 | 注册 方可回帖
返回
//