##
## Copyright (C) Huawei Technologies Co., Ltd. 2004-2005. All rights reserved.
##


    Ϊݿն豸İװ, DevSetupĿ¼Win2K/WinXPĿ¼, ֱ𱣴豸Win2000WinXP. ṩΪԱжο;

DevSetup.dllʹ˵:

1, DWORD DevSetup(BYTE byType, bool bDebug);
˵: ʵİװɾѯܣԴ򿪡رյϢ

byType: ʾͣȡֵ£
	0 װE600
	1 ɾE600
	2 ѯǰϵͳǷѾװE600
	3 Ϣ

bDebug򿪡رյϢȡֵ£
	true: 	򿪵Ϣ
	false: 	رյϢ

0ʾɹʾʧܣȡֵμ롱


2, DWORD Install(void);
˵: װE600

0ʾɹʾʧܣȡֵμ롱

3, DWORD Uninstall(void);
˵: ɾE600

0ʾɹʾʧܣȡֵμ롱

4, DWORD Detect(void);
˵: ѯǰϵͳǷѾװE600

0ʾɹʾʧܣȡֵμ롱

5, DWORD Help(void);
˵: Ϣ

0ʾɹʾʧܣȡֵμ롱


6, DWORD Scan(DWORD dwTime, bool bDebug, DEVSETUP_CALLBACK_TYPE CallBack);;
˵: ɨݿ豸װ, (Ŀǰṩ, ҲṩӢ˵)

dwTime: ɨ豸ʱ, λ();

bDebug򿪡رյϢȡֵ£
	true: 	򿪵Ϣ
	false: 	رյϢ

CallBack: ô˻ص, ɨ赽豸ʱô˺֪ͨ, Ŀǰص.
    : typedef void(*DEVSETUP_CALLBACK_TYPE)(DWORD dwStauts, void* pData);
    
0ʾɹʾʧܣȡֵμ롱

DevSetup.exeʹ˵:

1, Install
 [·/]DevSetup /install

2, Uninstall
 [·/]DevSetup /uninstall

3, Detect
 [·/]DevSetup /detect

4, Usage
  [·/]DevSetup /help  [·/]DevSetup ?

ִн:
    ִгɹ0;
    ִгӦ:



˵:
    װִɺҪ²豸ϵͳCM_Locate_DevNodeˢϵͳбֻеϵͳ¼µ󣬲űʾװɡ



:

// ӦѾ/Ѿһ豸Ľ;
#define DEV_SETUP_ERROR_ALREADY_EXISTS	    	DWORD(20001)	
// в;
#define DEV_SETUP_ERROR_INVALID_CMD 		DWORD(20002)	
// ֵ֧WINDOWS汾;
#define DEV_SETUP_ERROR_INVALID_SYS_VER	    	DWORD(20003)	
// ûҵװļ;
#define DEV_SETUP_ERROR_EMPTY_DIR		DWORD(20004)
// װļʧ;
#define DEV_SETUP_ERROR_INSTALL_FAIL		DWORD(20005)
// ɾʧ;
#define DEV_SETUP_ERROR_REMOVE_FAIL		DWORD(20006)
// ûҵ;
#define DEV_SETUP_DRIVER_NOT_EXISTS         	DWORD(10000)
// Ѿ;
#define DEV_SETUP_DRIVER_ALREADY_EXISTS     	DWORD(10001)


DevSetup.exeʹ÷():

#include <Windows.h>
#include <Winbase.h>

#include <stdio.h>

void main(void)
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi) );

    // Start the child process. 
    if( !CreateProcess( NULL, 		// No module name (use command line). 
        "DevSetup /install",       	// Command line. [/uninstall | /detect | /help]
        NULL,             		// Process handle not inheritable. 
        NULL,             		// Thread handle not inheritable. 
        FALSE,            		// Set handle inheritance to FALSE. 
        0,                		// No creation flags. 
        NULL,             		// Use parent's environment block. 
        NULL,             		// Use parent's starting directory. 
        &si,              		// Pointer to STARTUPINFO structure.
        &pi )             		// Pointer to PROCESS_INFORMATION structure.
    ) 
    {
        return;
    }

    // Wait until child process exits.
    WaitForSingleObject( pi.hProcess, INFINITE );

    DWORD   dwReturn;

    GetExitCodeProcess(pi.hProcess, &dwReturn);

    printf("%d", dwReturn);
    
    // Close process and thread handles. 
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );

    return;
}


