⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 setup.cpp

📁 单片机SPI下载驱动程序源码
💻 CPP
字号:
#include "stdafx.h"
#include "resource.h"

char	dir[256];
SERVICE_STATUS		stat;

BOOL CALLBACK DlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
//	int	i;
	HANDLE	hFile;
	SC_HANDLE mun,dio;
	BOOL	rez;

	switch (uMsg)
	{
		case WM_INITDIALOG:
		{
			hFile=CreateFile("\\\\.\\giveio",GENERIC_READ,0,NULL,OPEN_EXISTING,
				FILE_ATTRIBUTE_NORMAL,0);
			if(hFile==INVALID_HANDLE_VALUE){ // dio not found
				SC_HANDLE man=OpenSCManager(NULL,NULL,GENERIC_READ);
				if(man){
					dio=OpenService(man,"dio",SERVICE_QUERY_STATUS);
					if(dio){
						QueryServiceStatus(dio,&stat);
						if(stat.dwCurrentState==SERVICE_STOPPED){
							EnableWindow(GetDlgItem(hDlg,IDC_START),TRUE);
							EnableWindow(GetDlgItem(hDlg,IDC_REMOVE),TRUE);
						}
						else if(stat.dwCurrentState==SERVICE_RUNNING){
							SetDlgItemText(hDlg,IDC_STATIC1,"Service is running, but inaccessible");
						}
					}
					else {
						SetDlgItemText(hDlg,IDC_STATIC1,"Service not found");
						EnableWindow(GetDlgItem(hDlg,IDC_INSTALL),TRUE);
					}
					CloseServiceHandle(man);
				}
				else SetDlgItemText(hDlg,IDC_STATIC1,"Cannot connect to service database!");
			}
			else {
				SetDlgItemText(hDlg,IDC_STATIC1,"Driver works fine");
				EnableWindow(GetDlgItem(hDlg,IDC_STOP),TRUE);
			}
			return TRUE;
		}
		case WM_COMMAND:
			switch(LOWORD(wParam)){
				case IDCANCEL:
					EndDialog(hDlg, LOWORD(wParam));
					return TRUE;
				case IDC_START:
					mun=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
					if(mun){
						dio=OpenService(mun,"dio",SERVICE_START);
						if(dio){
							rez=StartService(dio,0,NULL);
							CloseServiceHandle(dio);
							if(!rez){
								CloseServiceHandle(mun);
								SetDlgItemText(hDlg,IDC_STATIC1,"Error starting service");
								return FALSE;
							}
						}
						else{}
						CloseServiceHandle(mun);
					}
					else{
						SetDlgItemText(hDlg,IDC_STATIC1,"OpenSCManager error!");
						return FALSE;
					}
					SetDlgItemText(hDlg,IDC_STATIC1,"Driver WORKS");
					EnableWindow(GetDlgItem(hDlg,IDC_START),FALSE);
					EnableWindow(GetDlgItem(hDlg,IDC_REMOVE),FALSE);
					EnableWindow(GetDlgItem(hDlg,IDC_STOP),TRUE);
					return TRUE;
				case IDC_STOP:
					mun=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
					if(mun){
						dio=OpenService(mun,"dio",SERVICE_STOP);
						if(dio){
							rez=ControlService(dio,SERVICE_CONTROL_STOP,&stat);
							CloseServiceHandle(dio);
							if(!rez) {
								CloseServiceHandle(mun);
								SetDlgItemText(hDlg,IDC_STATIC1,"Error stop service!");
								return FALSE;
							}
						}
						else {
							SetDlgItemText(hDlg,IDC_STATIC1,"Error open service!");
							CloseServiceHandle(mun);
							return FALSE;
						}
						CloseServiceHandle(mun);
					}
					else{
						SetDlgItemText(hDlg,IDC_STATIC1,"Cannot connect to service database!");
						return FALSE;
					}
					SetDlgItemText(hDlg,IDC_STATIC1,"Driver STOPPED");
					EnableWindow(GetDlgItem(hDlg,IDC_STOP),FALSE);
					EnableWindow(GetDlgItem(hDlg,IDC_START),TRUE);
					EnableWindow(GetDlgItem(hDlg,IDC_REMOVE),TRUE);
					return TRUE;
				case IDC_REMOVE:
					mun=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
					if(mun){
						dio=OpenService(mun,"dio",DELETE);
						if(dio){
							rez=DeleteService(dio);
							CloseServiceHandle(dio);
							if(!rez) {
								SetDlgItemText(hDlg,IDC_STATIC1,"Delete error!");
							}
							GetSystemDirectory(dir,256);
							lstrcat(dir,"\\drivers\\giveio.sys");
							DeleteFile(dir);
						}
					}
					SetDlgItemText(hDlg,IDC_STATIC1,"Driver removed");
					EnableWindow(GetDlgItem(hDlg,IDC_START),FALSE);
					EnableWindow(GetDlgItem(hDlg,IDC_REMOVE),FALSE);
					EnableWindow(GetDlgItem(hDlg,IDC_INSTALL),TRUE);
					return TRUE;
				case IDC_INSTALL:
					HRSRC rs=FindResource(NULL,MAKEINTRESOURCE(IDR_RCDATA1),RT_RCDATA);
					DWORD len=SizeofResource(NULL,rs);
					HGLOBAL bm=LoadResource(NULL,rs);
					GetSystemDirectory(dir,256);
					lstrcat(dir,"\\drivers\\giveio.sys");
					DeleteFile(dir);
					HFILE hf=_lcreat(dir,0);
					if(hf==HFILE_ERROR) {
						wsprintf(dir,"Copy error #%d",GetLastError());
						SetDlgItemText(hDlg,IDC_STATIC1,dir);
						return FALSE;
					}
					_lwrite(hf,(LPCTSTR)bm,len);
					_lclose(hf);
// 耦玟噱

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -