Create Your own MFC Dialog Project with a EDIT control and 4 buttons
You need this header files
#include <winsvc.h> #include <winerror.h>
add this variables
SC_HANDLE hSCMan = NULL; char szPath[MAX_PATH], szDriver[MAX_PATH];
BOOL CNtdriverDlg::OnInitDialog() { CDialog::OnInitDialog(); SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here SetDlgItemText(IDC_DRVNAME,"c:\\giveio.sys"); // connect to local service control manager if ((hSCMan = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS)) == NULL) { AfxMessageBox( "Can't connect to service control manager",MB_OK); } return TRUE; } void CNtdriverDlg::OnClose() { if (hSCMan != NULL) CloseServiceHandle(hSCMan); CDialog::OnClose(); } //******************************************************** //******************************************************** void CNtdriverDlg::OnInstall() { DWORD dwStatus; GetServiceName( szPath, szDriver); dwStatus = DriverInstall(szPath, szDriver); DisplayStatus(dwStatus); } void CNtdriverDlg::OnStart() { DWORD dwStatus; GetServiceName(szPath, szDriver); dwStatus = DriverStart(szDriver); DisplayStatus( dwStatus); } void CNtdriverDlg::OnStop() { DWORD dwStatus; GetServiceName( szPath, szDriver); dwStatus = DriverStop(szDriver); DisplayStatus( dwStatus); } void CNtdriverDlg::OnRemove() { DWORD dwStatus; GetServiceName( szPath, szDriver); dwStatus = DriverRemove(szDriver); DisplayStatus( dwStatus); } //******************************************************************* //******************************************************************* void CNtdriverDlg::GetServiceName( LPSTR lpPath, LPSTR lpDriver) { GetDlgItemText(IDC_DRVNAME, lpPath, MAX_PATH); _splitpath(lpPath, NULL, NULL, lpDriver, NULL); } DWORD CNtdriverDlg::DriverInstall(LPSTR lpPath, LPSTR lpDriver) { BOOL dwStatus = TRUE; SC_HANDLE hService = NULL; // add to service control manager's database if ((hService = CreateService(hSCMan, lpDriver, lpDriver, SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, lpPath, NULL, NULL, NULL, NULL, NULL)) == NULL) dwStatus = GetLastError(); else CloseServiceHandle(hService); return dwStatus; } // DriverInstall DWORD CNtdriverDlg::DriverStart(LPSTR lpDriver) { BOOL dwStatus = TRUE; SC_HANDLE hService = NULL; // get a handle to the service if ((hService = OpenService(hSCMan, lpDriver, SERVICE_ALL_ACCESS)) != NULL) { // start the driver if (!StartService(hService, 0, NULL)) dwStatus = GetLastError(); } else dwStatus = GetLastError(); if (hService != NULL) CloseServiceHandle(hService); return dwStatus; } // DriverStart DWORD CNtdriverDlg::DriverStop(LPSTR lpDriver) { BOOL dwStatus = TRUE; SC_HANDLE hService = NULL; SERVICE_STATUS serviceStatus; // get a handle to the service if ((hService = OpenService(hSCMan, lpDriver, SERVICE_ALL_ACCESS)) != NULL) { // stop the driver if (!ControlService(hService, SERVICE_CONTROL_STOP, &serviceStatus)) dwStatus = GetLastError(); } else dwStatus = GetLastError(); if (hService != NULL) CloseServiceHandle(hService); return dwStatus; } // DriverStop DWORD CNtdriverDlg::DriverRemove(LPSTR lpDriver) { BOOL dwStatus = TRUE; SC_HANDLE hService = NULL; // get a handle to the service if ((hService = OpenService(hSCMan, lpDriver, SERVICE_ALL_ACCESS)) != NULL) { // remove the driver if (!DeleteService(hService)) dwStatus = GetLastError(); } else dwStatus = GetLastError(); if (hService != NULL) CloseServiceHandle(hService); return dwStatus; } // DriverRemove void CNtdriverDlg::DisplayStatus( DWORD dwStatus) { CString str;//char szStatus[128]; str.Format("%d",dwStatus); SetDlgItemText(IDC_STATUS, str); } // DisplayStatus