Znn3bq.jpeg
²é¿´: 2450  |  »Ø¸´: 15

leafmavis

ľ³æ (ÎÄ̳¾«Ó¢)

[ÇóÖú] VC++ÖÐÈçºÎÓ¦ÓÃporttalk

ÓиöʵÑ飬ÊÇ¿ØÖÆÒ»¸öµç¶¯Ì¨×öÐýתÔ˶¯£¨Õⲿ·ÖVC++Ô´´úÂëÓɲúÆ·µÄÖÆÔìÉÌÌṩ£©£¬´Ó¶ø¸øÊµÑ鶯Îï´Ì¼¤£¬Í¬Ê±²É¼¯¶¯ÎïµÄÄԵ硣ÎÒÃÇÏëÔÚÐýתÔ˶¯µÄ¿ªÊ¼ºÍ½áÊøµÄʱºò£¬·Ö±ð¸ø²¢¿ÚÒ»ÃëÖÓµÄ¸ßµçÆ½£¬ÒÔ±ãÔÚÄÔµçÐźŲɼ¯ÏµÍ³ÉÏ´òÉÏͬ²½±ê¼Ç¡£ÎÒÃÇ×öÁËÒ»¸ö²¢¿ÚµÄÁ÷Ë®µÆÒÔÑéÖ¤²¢¿Ú²Ù×÷µÄ¿É¿¿ÐÔ¡£ÓÃC++bulider 6.0ʱ£¬ÀûÓÃPortTalkÄÜ¿ØÖÆÁ÷Ë®µÆ¹¤×÷£»µ«ÓÃVC++ 6.0ʱ£¬±¨´í¡£Òòµç¶¯Ì¨µÄÔ´ÂëÊÇVC++ 6.0£¬ËùÒÔÏëÇë½Ì¸ßÊÖ¡£Ð»Ð»£¡
     ÏÂÃæÊǵ¥´¿µÄ²¢¿Ú²Ù×÷ÑéÖ¤£º
1¡¢ÓÃC++buliderʱ£¬ÔÚ¹¤³ÌĿ¼Ï¿½½øÕâÁ½¸öÎļþ£ºPortTalk.sys; PortTalk.h¡£ÔÚFormÖÐÌí¼ÓÒ»¸ö°´¼ü£¨¹¦ÄÜΪ£ºÊ¹²¢¿ÚÊä³öÂö¿íΪ1ÃëµÄ¸ßµçƽ£©£¬²¢ÔÚFormÖÐÌí¼ÓÁ˲¢¿Ú³õʼ»¯£¨ÒòΪ¼ÆËã»ú¿ª»úʱ²¢¿Ú¸÷Êý¾ÝλÊÇ¸ßµçÆ½£¬³õʼ»¯¾ÍÊǽ«ËùÓÐÊý¾ÝλÖõͣ©¡£³ÌÐòÔËÐÐÕý³££¬Á÷Ë®µÆµÄ¿ª±ÕÕý³£¡£

2¡¢ÓÃVC++ʱ£¬²Ù×÷ͬÉÏ£¬µ«±àÒëʱ±¨´í¡£ÏëÇëÎÊһϣ¬ÔÚVC++ÏÂÈçºÎʹÓÃPortTalk £¿ÍøÉÏû˵PortTalk²»ÄÜÓÃÓÚVC++ѽ

--------------------Configuration: fang1 - Win32 Debug--------------------
Compiling resources...
Compiling...
StdAfx.cpp
Compiling...
fang1.cpp
fang1Dlg.cpp
e:\work\vc\learn1\fang1\porttalk.h(41) : error C2065: 'ShowMessage' : undeclared identifier
e:\work\vc\learn1\fang1\porttalk.h(80) : error C2065: 'SC_HANDLE' : undeclared identifier
e:\work\vc\learn1\fang1\porttalk.h(80) : error C2146: syntax error : missing ';' before identifier 'SchSCManager'
e:\work\vc\learn1\fang1\porttalk.h(80) : error C2065: 'SchSCManager' : undeclared identifier
e:\work\vc\learn1\fang1\porttalk.h(81) : error C2146: syntax error : missing ';' before identifier 'schService'
e:\work\vc\learn1\fang1\porttalk.h(81) : error C2065: 'schService' : undeclared identifier
e:\work\vc\learn1\fang1\porttalk.h(85) : error C2065: 'OpenSCManager' : undeclared identifier
e:\work\vc\learn1\fang1\porttalk.h(85) : error C2065: 'SC_MANAGER_ALL_ACCESS' : undeclared identifier
e:\work\vc\learn1\fang1\porttalk.h(94) : error C2065: 'OpenService' : undeclared identifier
e:\work\vc\learn1\fang1\porttalk.h(94) : error C2065: 'SERVICE_ALL_ACCESS' : undeclared identifier
e:\work\vc\learn1\fang1\porttalk.h(110) : error C2065: 'StartService' : undeclared identifier
e:\work\vc\learn1\fang1\porttalk.h(112) : error C2065: 'CloseServiceHandle' : undeclared identifier
e:\work\vc\learn1\fang1\porttalk.h(118) : error C2146: syntax error : missing ';' before identifier 'SchSCManager'
e:\work\vc\learn1\fang1\porttalk.h(119) : error C2146: syntax error : missing ';' before identifier 'schService'
e:\work\vc\learn1\fang1\porttalk.h(129) : error C2065: 'CreateService' : undeclared identifier
Generating Code...
Error executing cl.exe.

fang1.exe - 15 error(s), 0 warning(s)
»Ø¸´´ËÂ¥

» ²ÂÄãϲ»¶

» ±¾Ö÷ÌâÏà¹Ø¼ÛÖµÌùÍÆ¼ö£¬¶ÔÄúͬÑùÓаïÖú:

´ºÈç±­ÖÐË®
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

yalefield

½ð³æ (ÎÄ̳¾«Ó¢)

ÀϺºÒ»Ã¶

¡¾´ð°¸¡¿Ó¦Öú»ØÌû

¡ï ¡ï
ÓàÔó³É(½ð±Ò+2): лл²ÎÓëÓ¦Öú£¡ 2011-05-04 22:51:48
leafmavis(½ð±Ò+2): ллÈÈÇéÏàÖú 2011-05-05 09:08:35
(1) ÔÚÄúÓõ½PortTalkÖеĺ¯Êýʱ£¬Ê×ÏÈÒª
#include "PortTalk.h"

(2) µÈÏÂÒ»²½ÄúÓöµ½¸ü¶à´íÎóʱ£¬ÔÙ˵¿©¡£
2Â¥2011-05-04 08:42:37
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

leafmavis

ľ³æ (ÎÄ̳¾«Ó¢)

ллÄúµÄ»Ø¸´£¬²»¹ýÍ·ÎļþÊǼÓÉÏÁ˵ġ£¸½ÉÏC++Ô´Â룬³ý #include "PortTalk.h" ºÍ×îºóÃæµÄ°´¼üÏìÓ¦º¯Êý£¬ÆäËûµÄ¶¼ÊÇ×Ô¶¯Éú³ÉµÄ¡£Çë°ïæ·ÖÎö£¬Ð»Ð»£¡


// fang1Dlg.cpp : implementation file
//

#include "stdafx.h"
#include "fang1.h"
#include "fang1Dlg.h"
#include "PortTalk.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
        CAboutDlg();

// Dialog Data
        //{{AFX_DATA(CAboutDlg)
        enum { IDD = IDD_ABOUTBOX };
        //}}AFX_DATA

        // ClassWizard generated virtual function overrides
        //{{AFX_VIRTUAL(CAboutDlg)
        protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
        //}}AFX_VIRTUAL

// Implementation
protected:
        //{{AFX_MSG(CAboutDlg)
        //}}AFX_MSG
        DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
        //{{AFX_DATA_INIT(CAboutDlg)
        //}}AFX_DATA_INIT
}

void CAboutDlg:oDataExchange(CDataExchange* pDX)
{
        CDialog:oDataExchange(pDX);
        //{{AFX_DATA_MAP(CAboutDlg)
        //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
        //{{AFX_MSG_MAP(CAboutDlg)
                // No message handlers
        //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFang1Dlg dialog

CFang1Dlg::CFang1Dlg(CWnd* pParent /*=NULL*/)
        : CDialog(CFang1Dlg::IDD, pParent)
{
        //{{AFX_DATA_INIT(CFang1Dlg)
                // NOTE: the ClassWizard will add member initialization here
        //}}AFX_DATA_INIT
        // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
        m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CFang1Dlg:oDataExchange(CDataExchange* pDX)
{
        CDialog:oDataExchange(pDX);
        //{{AFX_DATA_MAP(CFang1Dlg)
                // NOTE: the ClassWizard will add DDX and DDV calls here
        //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CFang1Dlg, CDialog)
        //{{AFX_MSG_MAP(CFang1Dlg)
        ON_WM_SYSCOMMAND()
        ON_WM_PAINT()
        ON_WM_QUERYDRAGICON()
        ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
        //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFang1Dlg message handlers

BOOL CFang1Dlg::OnInitDialog()
{
        CDialog::OnInitDialog();

        // Add "About..." menu item to system menu.

        // IDM_ABOUTBOX must be in the system command range.
        ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
        ASSERT(IDM_ABOUTBOX < 0xF000);

        CMenu* pSysMenu = GetSystemMenu(FALSE);
        if (pSysMenu != NULL)
        {
                CString strAboutMenu;
                strAboutMenu.LoadString(IDS_ABOUTBOX);
                if (!strAboutMenu.IsEmpty())
                {
                        pSysMenu->AppendMenu(MF_SEPARATOR);
                        pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
                }
        }

        // Set the icon for this dialog.  The framework does this automatically
        //  when the application's main window is not a dialog
        SetIcon(m_hIcon, TRUE);                        // Set big icon
        SetIcon(m_hIcon, FALSE);                // Set small icon
       
        // TODO: Add extra initialization here
       
        return TRUE;  // return TRUE  unless you set the focus to a control
}

void CFang1Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
        if ((nID & 0xFFF0) == IDM_ABOUTBOX)
        {
                CAboutDlg dlgAbout;
                dlgAbout.DoModal();
        }
        else
        {
                CDialog::OnSysCommand(nID, lParam);
        }
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CFang1Dlg::OnPaint()
{
        if (IsIconic())
        {
                CPaintDC dc(this); // device context for painting

                SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

                // Center icon in client rectangle
                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;

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

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CFang1Dlg::OnQueryDragIcon()
{
        return (HCURSOR) m_hIcon;
}

void CFang1Dlg::OnButton1()
{
        // TODO: Add your control notification handler code here
        OpenPortTalk();  //´ò¿ªµØÖ·²Ù×÷
        outportb(0x378,0xFF);
        Sleep(1000);
        outportb(0x378,0x00);
        ClosePortTalk();  //¹Ø±ÕµØÖ·²Ù×÷
}
´ºÈç±­ÖÐË®
3Â¥2011-05-04 09:12:39
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

sudo

ľ³æ (ÕýʽдÊÖ)

¡¾´ð°¸¡¿Ó¦Öú»ØÌû

¡ï ¡ï
ÓàÔó³É(½ð±Ò+2): лл²ÎÓëÓ¦Öú£¡ 2011-05-04 22:52:12
leafmavis(½ð±Ò+7): ллÈÈÇéÏàÖú£¬VS2010ϱàÒëͨ¹ýµÄhÎļþ£¬ÓÃC++6.0»¹ÓÐ14¸ö´íÎó£¬ÎÒÔÙ×ÐϸÑо¿Ï£¬Ð»Ð»£¡ 2011-05-05 09:12:29
½çÃæµÄ²¿·Ö¶¼Ã»ÓÐÎÊÌ⣨»°ËµÕâô¼òµ¥µÄ¶«Î÷Ö±½ÓÓÃconsole application²»ºÃÂ

ÓÚÊÇÂ¥Ö÷Äܲ»ÄÜÌùÒ»ÏÂPortTalk.hÕâ¸öÎļþµÄÄÚÈÝÄØ£¿

¿´Ñù×ÓÏñÊǰѺ¯Êý¶¨Òå·Åµ½.hÎļþÀïÃæÁË£¨²»ÊÇÀàÄ£°åµÈÌØÊâÇé¿öµÄ»°Õâô×öÆäʵ²»ºÃµÄ£©£¬¶÷£¬ËùÒÔÏÈ¿´¿´°É

PS£º
Ìù´úÂëµÄʱºò£¬·Åµ½
CODE:
Õâ¸öÀïÃæ

»á±È½ÏºÃ¿´Ò»µã
4Â¥2011-05-04 10:27:47
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

yalefield

½ð³æ (ÎÄ̳¾«Ó¢)

ÀϺºÒ»Ã¶

¡ï
ÓàÔó³É(½ð±Ò+1): лл²ÎÓëÓ¦Öú£¡ 2011-05-04 22:52:22
¾ÍÊÇÓÃ<code>°Ñ´úÂ벿·ÖÀ¨ÆðÀ´
5Â¥2011-05-04 10:49:08
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

leafmavis

ľ³æ (ÎÄ̳¾«Ó¢)

ÒýÓûØÌû:
Originally posted by sudo at 2011-05-04 10:27:47:
½çÃæµÄ²¿·Ö¶¼Ã»ÓÐÎÊÌ⣨»°ËµÕâô¼òµ¥µÄ¶«Î÷Ö±½ÓÓÃconsole application²»ºÃÂ

ÓÚÊÇÂ¥Ö÷Äܲ»ÄÜÌùÒ»ÏÂPortTalk.hÕâ¸öÎļþµÄÄÚÈÝÄØ£¿

¿´Ñù×ÓÏñÊǰѺ¯Êý¶¨Òå·Åµ½.hÎļþÀïÃæÁË£¨²»ÊÇÀàÄ£°åµÈÌØÊâÇé¿öµÄ»°Õâô×ö ...

µ±Ê±Ñ¡ÓÃPortTalkÊÇÒòΪÕâ¸ö±È½Ï¼òµ¥£¬PortTalkÊÇ´ÓÍøÉÏÏµģ¨¹ÙÍøhttp://www.beyondlogic.org/porttalk/£©£¬¶øÇÒÓÃC++builderÔËÐÐÕý³£¡£ÏÂÃæÊÇPortTalk.hµÄÄÚÈÝ£¬Çë°ï濴һϣ¬Ð»Ð»£¡

<

#ifndef _PORTTALK_H_
#define _PORTTALK_H_

#include
//---------------------------------------------------------------------------

//32768-65535 are reserved for customers
#define PORTTALK_TYPE                       40000

// The IOCTRL function codes from 0x800 to 0xFFF are for customer use
#define IOCTL_IOPM_RESTRICT_ALL_ACCESS      CTL_CODE(PORTTALK_TYPE, 0x900, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_IOPM_ALLOW_EXCUSIVE_ACCESS    CTL_CODE(PORTTALK_TYPE, 0x901, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_SET_IOPM                      CTL_CODE(PORTTALK_TYPE, 0x902, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_ENABLE_IOPM_ON_PROCESSID      CTL_CODE(PORTTALK_TYPE, 0x903, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_READ_PORT_UCHAR               CTL_CODE(PORTTALK_TYPE, 0x904, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_WRITE_PORT_UCHAR              CTL_CODE(PORTTALK_TYPE, 0x905, METHOD_BUFFERED, FILE_ANY_ACCESS)

//---------------------------------------------------------------------------
bool OpenPortTalk(void);
void ClosePortTalk(void);
void outportb(unsigned short int PortAddress, unsigned char byte);
unsigned char inportb(unsigned short int PortAddress);
bool InstallPortTalkDriver(void);
bool StartPortTalkDriver(void);

//---------------------------------------------------------------------------
HANDLE PortTalk_Handle;         //Handle for PortTalk Driver

void outportb(unsigned short int PortAddress, unsigned char byte)
{
    unsigned int error;
    DWORD BytesReturned;
    unsigned char Buffer[3];
    unsigned short * pBuffer;
    pBuffer = (unsigned short *)&Buffer[0];
    *pBuffer = PortAddress;
    Buffer[2] = byte;

    error = DeviceIoControl(PortTalk_Handle,IOCTL_WRITE_PORT_UCHAR,&Buffer,3,NULL,0,&BytesReturned,NULL);
    if(!error)
        ShowMessage("Error occured during outportb while talking to PortTalk driver";
}

unsigned char inportb(unsigned short int PortAddress)
{
    unsigned int error;
    DWORD BytesReturned;
    unsigned char Buffer[3];
    unsigned short * pBuffer;
    pBuffer = (unsigned short *)&Buffer;
    *pBuffer = PortAddress;

    error = DeviceIoControl(PortTalk_Handle,IOCTL_READ_PORT_UCHAR,&Buffer,2,&Buffer,1,&BytesReturned,NULL);
    if(!error)
        ShowMessage("Error occured during inportb while talking to PortTalk driver";

    return(Buffer[0]);
}

bool OpenPortTalk(void)
{
    PortTalk_Handle = CreateFile("\\\\.\\PortTalk",GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
    if(PortTalk_Handle == INVALID_HANDLE_VALUE)
    {
        StartPortTalkDriver();
        PortTalk_Handle = CreateFile("\\\\.\\PortTalk",GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
        if(PortTalk_Handle == INVALID_HANDLE_VALUE)
            return false;
    }
    return true;
}

void ClosePortTalk(void)
{
    CloseHandle(PortTalk_Handle);
}

bool StartPortTalkDriver(void)
{
    SC_HANDLE  SchSCManager;
    SC_HANDLE  schService;
    BOOL       ret;
    DWORD      err;

    SchSCManager = OpenSCManager (NULL,NULL,SC_MANAGER_ALL_ACCESS);
    if(SchSCManager == NULL)
    {
        if(GetLastError() == ERROR_ACCESS_DENIED)
            ShowMessage("°²×°Çý¶¯PortTalk.sys£¬ÐèÒª¹ÜÀíÔ±µÄȨÏÞ£¡";
        return false;
    }

    do{
        schService = OpenService(SchSCManager,"PortTalk",SERVICE_ALL_ACCESS);
        if (schService == NULL)
        {
            switch(GetLastError())
            {
                case ERROR_ACCESS_DENIED:
                    return false;
                case ERROR_INVALID_NAME:
                    return false;
                case ERROR_SERVICE_DOES_NOT_EXIST:
                     InstallPortTalkDriver();
                     break;
            }
        }
    }while (schService == NULL);

    ret = StartService(schService,0,NULL);
    if(ret == NULL)    return false;
    CloseServiceHandle (schService);
    return true;
}

bool InstallPortTalkDriver(void)
{
    SC_HANDLE  SchSCManager;
    SC_HANDLE  schService;
    DWORD      err;
    CHAR       DriverFileName[80];

    GetSystemDirectory(DriverFileName, 55);
    lstrcat(DriverFileName,"\\Drivers\\PortTalk.sys";

    if(!CopyFile("PortTalk.sys", DriverFileName, FALSE))
        return false;
    SchSCManager = OpenSCManager (NULL,NULL,SC_MANAGER_ALL_ACCESS);
    schService = CreateService (SchSCManager,"PortTalk","PortTalk",SERVICE_ALL_ACCESS,SERVICE_KERNEL_DRIVER,SERVICE_DEMAND_START,SERVICE_ERROR_NORMAL,"System32\\Drivers\\PortTalk.sys",NULL,NULL,NULL,NULL,NULL);

    if(schService == NULL)
        return false;
    CloseServiceHandle (schService);
    return true;
}
//---------------------------------------------------------------------------
#endif

code>
´ºÈç±­ÖÐË®
6Â¥2011-05-04 14:20:15
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

yyqiao

½ð³æ (СÓÐÃûÆø)

¡¾´ð°¸¡¿Ó¦Öú»ØÌû

¡ï ¡ï
ÓàÔó³É(½ð±Ò+2): лл²ÎÓëÓ¦Öú£¬»¶Ó­³£À´³ÌÐòÓïÑ԰棡 2011-05-04 22:52:56
leafmavis(½ð±Ò+1): лл²ÎÓëÓ¦Öú 2011-05-05 09:13:12
ÏàÐÅÕâ¸öPortTalkÀﻹʹÓÃÁËһЩÆäËûµÄ¶¨ÒåºÍº¯Êý£¬Èç
SC_HANDLE
ShowMessage()
µÈ¡£
Òò´Ë£¬Ö»ÓÃÕâ¸öPortTalk.h¿Ï¶¨²»ÐС£
×îºÃ¿´¿´£¬Ëü»¹ÓÐÆäËûÏà¹ØÁªµÄÎļþ¡£
²©¿Í£ºblog.sina.com.cn/nkuqiao£»Ó¦Óû¯Ñ§£ºblog.sina.com.cn/nkapc£»»¯Ñ§¹¤³Ì£ºblog.sina.com.cn/nkceg
7Â¥2011-05-04 14:33:45
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

sudo

ľ³æ (ÕýʽдÊÖ)

¡¾´ð°¸¡¿Ó¦Öú»ØÌû

¡ï ¡ï
ÓàÔó³É(½ð±Ò+2): ÐÁ¿àÁË£¡ 2011-05-04 22:54:12
²»±£Ö¤ÄÜÓ㬰ÑÏÂÃæµÄ´úÂëÌùµ½PortTalk.hÀïÃæµÄ#include ÄÇÐеÄÏÂÃæ
CODE:
#include
#include

#ifdef _MFC_VER
#define ShowMessage MessageBox
#else
#define ShowMessage printf
#endif

ÄãÔÙ±àÒë¿´¿´ÓÐʲô´íÎ󣬴ó¼ÒÔÙÌÖÂÛ~


¡¾ÆÀÂÛ¡¿

porttalkÕâ¸ö.h¿âдµÃºÜ²»ºÃ

Èç¹ûÔÚÁ½¸ö²»Í¬µÄ.c/.cppÎļþÀïÃæincludeµÄ»°£¬×÷Ϊһ¸ö¹¤³Ì£¬»áÓÐÖØ¶¨ÒåerrorµÄ

²»¹ýÏȾÍÕâôµØ°É£¬µÈÂ¥Ö÷ÒÔºóÊìϤ±à³ÌÖ®ºó£¬×Ô¼ºÐ´¶¼²»ÊÇÎÊÌâ
8Â¥2011-05-04 14:56:34
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

leafmavis

ľ³æ (ÎÄ̳¾«Ó¢)

ÒýÓûØÌû:
Originally posted by sudo at 2011-05-04 14:56:34:
²»±£Ö¤ÄÜÓ㬰ÑÏÂÃæµÄ´úÂëÌùµ½PortTalk.hÀïÃæµÄ#include <winioctl.h>ÄÇÐеÄÏÂÃæ

[code]
#include <windows.h>
#include <stdio.h>

#ifdef _MFC_VER
#define ShowMessage MessageBox
...

лл¸÷λÈÈÐĵĻظ´¡£
¼ÓÉÏÕâ¶Îºó»¹±¨´í¡£

fang1Dlg.cpp
e:\work\vc\learn1\fang1\porttalk.h(51) : error C2660: 'MessageBoxA' : function does not take 1 parameters
e:\work\vc\learn1\fang1\porttalk.h(65) : error C2660: 'MessageBoxA' : function does not take 1 parameters
e:\work\vc\learn1\fang1\porttalk.h(90) : error C2065: 'SC_HANDLE' : undeclared identifier
e:\work\vc\learn1\fang1\porttalk.h(90) : error C2146: syntax error : missing ';' before identifier 'SchSCManager'
e:\work\vc\learn1\fang1\porttalk.h(90) : error C2065: 'SchSCManager' : undeclared identifier
e:\work\vc\learn1\fang1\porttalk.h(91) : error C2146: syntax error : missing ';' before identifier 'schService'
e:\work\vc\learn1\fang1\porttalk.h(91) : error C2065: 'schService' : undeclared identifier
e:\work\vc\learn1\fang1\porttalk.h(95) : error C2065: 'OpenSCManager' : undeclared identifier
e:\work\vc\learn1\fang1\porttalk.h(95) : error C2065: 'SC_MANAGER_ALL_ACCESS' : undeclared identifier
e:\work\vc\learn1\fang1\porttalk.h(99) : error C2660: 'MessageBoxA' : function does not take 1 parameters
e:\work\vc\learn1\fang1\porttalk.h(104) : error C2065: 'OpenService' : undeclared identifier
e:\work\vc\learn1\fang1\porttalk.h(104) : error C2065: 'SERVICE_ALL_ACCESS' : undeclared identifier
e:\work\vc\learn1\fang1\porttalk.h(120) : error C2065: 'StartService' : undeclared identifier
e:\work\vc\learn1\fang1\porttalk.h(122) : error C2065: 'CloseServiceHandle' : undeclared identifier
e:\work\vc\learn1\fang1\porttalk.h(128) : error C2146: syntax error : missing ';' before identifier 'SchSCManager'
e:\work\vc\learn1\fang1\porttalk.h(129) : error C2146: syntax error : missing ';' before identifier 'schService'
e:\work\vc\learn1\fang1\porttalk.h(139) : error C2065: 'CreateService' : undeclared identifier
Error executing cl.exe.

fang1.exe - 17 error(s), 0 warning(s)
>
´ºÈç±­ÖÐË®
9Â¥2011-05-04 20:41:20
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

sudo

ľ³æ (ÕýʽдÊÖ)

¡¾´ð°¸¡¿Ó¦Öú»ØÌû

¡ï ¡ï
ÓàÔó³É(½ð±Ò+2): лл²ÎÓëÓ¦Öú£¡ 2011-05-04 22:55:03
ÏÂÃæµÄporttalk.hÔÚVS2010ϱàÒëͨ¹ý£¬È»ºóÔËÐÐûÑéÖ¤~
CODE:
#ifndef _PORTTALK_H_
#define _PORTTALK_H_

#include
#include

#ifdef _MSC_VER
static void ShowMessage(LPCTSTR str){
        MessageBox(NULL, str, NULL, 0);
}
#endif

//---------------------------------------------------------------------------

//32768-65535 are reserved for customers
#define PORTTALK_TYPE                       40000

// The IOCTRL function codes from 0x800 to 0xFFF are for customer use
#define IOCTL_IOPM_RESTRICT_ALL_ACCESS      CTL_CODE(PORTTALK_TYPE, 0x900, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_IOPM_ALLOW_EXCUSIVE_ACCESS    CTL_CODE(PORTTALK_TYPE, 0x901, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_SET_IOPM                      CTL_CODE(PORTTALK_TYPE, 0x902, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_ENABLE_IOPM_ON_PROCESSID      CTL_CODE(PORTTALK_TYPE, 0x903, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_READ_PORT_UCHAR               CTL_CODE(PORTTALK_TYPE, 0x904, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_WRITE_PORT_UCHAR              CTL_CODE(PORTTALK_TYPE, 0x905, METHOD_BUFFERED, FILE_ANY_ACCESS)

//---------------------------------------------------------------------------
bool OpenPortTalk(void);
void ClosePortTalk(void);
void outportb(unsigned short int PortAddress, unsigned char byte);
unsigned char inportb(unsigned short int PortAddress);
bool InstallPortTalkDriver(void);
bool StartPortTalkDriver(void);

//---------------------------------------------------------------------------
HANDLE PortTalk_Handle;         //Handle for PortTalk Driver

void outportb(unsigned short int PortAddress, unsigned char byte)
{
    unsigned int error;
    DWORD BytesReturned;
    unsigned char Buffer[3];
    unsigned short * pBuffer;
    pBuffer = (unsigned short *)&Buffer[0];
    *pBuffer = PortAddress;
    Buffer[2] = byte;

    error = DeviceIoControl(PortTalk_Handle,IOCTL_WRITE_PORT_UCHAR,&Buffer,3,NULL,0,&BytesReturned,NULL);
    if(!error)
        ShowMessage("Error occured during outportb while talking to PortTalk driver");
}

unsigned char inportb(unsigned short int PortAddress)
{
    unsigned int error;
    DWORD BytesReturned;
    unsigned char Buffer[3];
    unsigned short * pBuffer;
    pBuffer = (unsigned short *)&Buffer;
    *pBuffer = PortAddress;

    error = DeviceIoControl(PortTalk_Handle,IOCTL_READ_PORT_UCHAR,&Buffer,2,&Buffer,1,&BytesReturned,NULL);
    if(!error)
        ShowMessage("Error occured during inportb while talking to PortTalk driver");

    return(Buffer[0]);
}

bool OpenPortTalk(void)
{
    PortTalk_Handle = CreateFile("\\\\.\\PortTalk",GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
    if(PortTalk_Handle == INVALID_HANDLE_VALUE)
    {
        StartPortTalkDriver();
        PortTalk_Handle = CreateFile("\\\\.\\PortTalk",GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
        if(PortTalk_Handle == INVALID_HANDLE_VALUE)
            return false;
    }
    return true;
}

void ClosePortTalk(void)
{
    CloseHandle(PortTalk_Handle);
}

bool StartPortTalkDriver(void)
{
    SC_HANDLE  SchSCManager;
    SC_HANDLE  schService;
    BOOL       ret;
    DWORD      err;

    SchSCManager = OpenSCManager (NULL,NULL,SC_MANAGER_ALL_ACCESS);
    if(SchSCManager == NULL)
    {
        if(GetLastError() == ERROR_ACCESS_DENIED)
            ShowMessage("°²×°Çý¶¯PortTalk.sys£¬ÐèÒª¹ÜÀíÔ±µÄȨÏÞ£¡");
        return false;
    }

    do{
        schService = OpenService(SchSCManager,"PortTalk",SERVICE_ALL_ACCESS);
        if (schService == NULL)
        {
            switch(GetLastError())
            {
                case ERROR_ACCESS_DENIED:
                    return false;
                case ERROR_INVALID_NAME:
                    return false;
                case ERROR_SERVICE_DOES_NOT_EXIST:
                     InstallPortTalkDriver();
                     break;
            }
        }
    }while (schService == NULL);

    ret = StartService(schService,0,NULL);
    if(ret == NULL)    return false;
    CloseServiceHandle (schService);
    return true;
}

bool InstallPortTalkDriver(void)
{
    SC_HANDLE  SchSCManager;
    SC_HANDLE  schService;
    DWORD      err;
    CHAR       DriverFileName[80];

    GetSystemDirectory(DriverFileName, 55);
    lstrcat(DriverFileName,"\\Drivers\\PortTalk.sys");

    if(!CopyFile("PortTalk.sys", DriverFileName, FALSE))
        return false;
    SchSCManager = OpenSCManager (NULL,NULL,SC_MANAGER_ALL_ACCESS);
    schService = CreateService (SchSCManager,"PortTalk","PortTalk",SERVICE_ALL_ACCESS,SERVICE_KERNEL_DRIVER,SERVICE_DEMAND_START,SERVICE_ERROR_NORMAL,"System32\\Drivers\\PortTalk.sys",NULL,NULL,NULL,NULL,NULL);

    if(schService == NULL)
        return false;
    CloseServiceHandle (schService);
    return true;
}
//---------------------------------------------------------------------------
#endif

10Â¥2011-05-04 21:20:31
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
Ïà¹Ø°æ¿éÌø×ª ÎÒÒª¶©ÔÄÂ¥Ö÷ leafmavis µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[¿¼ÑÐ] ±¾ÈËÅ®º¢ +7 ºðºð£¬ 2026-04-10 9/450 2026-04-11 14:45 by ACS Nano¡ª¡ª
[¿¼ÑÐ] 285Çóµ÷¼Á +8 ¶ñ·¨´ó¶þµÄÆøÎ¶ß 2026-04-05 11/550 2026-04-11 11:28 by ×ÏêØ×ÏÆå
[¿¼ÑÐ] 296Çóµ÷¼Á +13 Íô£¡£¿£¡ 2026-04-10 15/750 2026-04-11 10:31 by ÄæË®³Ë·ç
[¿¼ÑÐ] µ÷¼Á »¯Ñ§ 307 +21 73372112 2026-04-09 23/1150 2026-04-10 23:53 by wj165256
[¿¼ÑÐ] 326Çóµ÷¼Á +5 Shansyn 2026-04-10 5/250 2026-04-10 22:23 by Öí»á·É
[¿¼ÑÐ] 301Çóµ÷¼Á +5 149. 2026-04-10 5/250 2026-04-10 15:45 by ²ñС°×
[¿¼ÑÐ] 282£¬µçÆø¹¤³Ìרҵ£¬Çóµ÷¼Á£¬²»Ìôרҵ +9 jggshjkkm 2026-04-10 9/450 2026-04-10 14:55 by ÄæË®³Ë·ç
[¿¼ÑÐ] 344Çóµ÷¼Á +7 ؼ·çѩҹ¹éÈËØ¼ 2026-04-09 7/350 2026-04-10 12:05 by pengliang8036
[¿¼ÑÐ] µ÷¼ÁÉêÇë086000Ò»Ö¾Ô¸Î÷±±Å©ÁֿƼ¼´óѧÉúÎïÓëÒ½Ò©320·Ö-±¾¿ÆÆë³¹¤Òµ´óѧ +3 ÃÀÃÀŮʿ 2026-04-09 3/150 2026-04-10 10:31 by liuhuiying09
[¿¼ÑÐ] ±¾¿ÆÎ÷¹¤´ó 0856 324Çóµ÷¼Á +10 wysyjs25 2026-04-09 11/550 2026-04-10 08:37 by 5268321
[¿¼ÑÐ] Çóµ÷¼Á²ÄÁÏ¿ÆÑ§Ó빤³ÌÒ»Ö¾Ô¸985³õÊÔ365·Ö +5 ²Ä»¯Àî¿É 2026-04-08 5/250 2026-04-09 17:00 by Lilly_Li
[¿¼ÑÐ] 085600²ÄÁÏÓ뻯¹¤×¨Ë¶329 Çóµ÷¼Á +24 ¶îcc 2026-04-06 25/1250 2026-04-09 16:01 by wp06
[¿¼ÑÐ] ²ÄÁÏר˶322 +14 ¹þ¹þ¹þºðºðºð¹þ 2026-04-05 14/700 2026-04-09 13:25 by 5268321
[¿¼ÑÐ] ²ÄÁϵ÷¼Á +14 Ò»ÑùYWY 2026-04-06 14/700 2026-04-08 23:00 by Öí»á·É
[¿¼ÑÐ] Ò»Ö¾Ô¸»ªÄÏʦ·¶´óѧ0702ÎïÀíѧ305µ÷¼Á +4 Äî³£°² 2026-04-07 6/300 2026-04-08 22:53 by bljnqdcc
[¿¼ÑÐ] ÉúÎïѧѧ˶£¬³õÊÔ351·Ö£¬Çóµ÷¼Á +4 ¡­¡«¡¢Íõ¡­¡« 2026-04-08 5/250 2026-04-08 21:49 by limeifeng
[¿¼ÑÐ] Ò»Ö¾Ô¸Ö£ÖÝ´óѧ085600Çóµ÷¼Á +21 ³ÔµÄ²»ÉÙ 2026-04-05 24/1200 2026-04-08 16:47 by sunhuadong
[¿¼ÑÐ] 326·Ö£¬Ò»Ö¾Ô¸»¦9£¬ÇóÉúÎïѧµ÷¼Á +4 Áõīī 2026-04-05 4/200 2026-04-08 06:22 by lijunpoly
[¿¼ÑÐ] ÉúÎïµ÷¼Á +5 ³È×Ó³È×Ó³È×Ó°¡ 2026-04-05 9/450 2026-04-07 15:31 by Éϰ¶¿ì¿ì
[¿¼ÑÐ] Ò»Ö¾Ô¸ËÕÖÝ´óѧ²ÄÁϹ¤³Ì£¨085601£©×¨Ë¶ÓпÆÑо­ÀúÈýÏî¹ú½±Á½¸öʵÓÃÐÍרÀûÒ»ÏîÊ¡¼¶Á¢Ïî +11 ´ó»ðɽС»ðɽ 2026-04-05 11/550 2026-04-06 22:55 by yunlongyang
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û