王艳平windows网络与通信程序设计代码调试求助

hongming6662 2007-05-07 04:44:00
主题: 王艳平windows网络与通信程序设计代码调试求助
windows网络与通信程序设计。我在调试第9章的程序是很多都通不过,我真的不知道怎么调试。。前面的7章我都能看懂。到了第8章我没学仔细看,后面9 11 12章的代码部分我调试不过我看一下主要是下面的代码通不过。由于我是自学的,没有人知道,所以无奈之下想请各位前辈求救。我的电脑上所以的程序都通不过
if(!ProtoStartService())
{
printf(" ProtoStartService() failed %d \n", ::GetLastError());
return -1;
}
结果是1060 我查了一下lookuperror说指定的服务并未以已安装的服务存在。.
请问是不是我的protocal没有装好啊。请问怎么解决。
...全文
923 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyelianqu 2011-10-25
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xmjt621 的回复:]
看看这个函数:
BOOL ProtoStartService()
{
BOOL bRet = FALSE;
SC_HANDLE hSCM = NULL, hService = NULL;
char szLinkName[] = "slNdisProt";

……
}

它指向的服务名是 slNdisProt ,我试了一下 把 packet.inf 里的注册服务部分的 packe……
[/Quote]

照你这么做,还是会出错,把PACKET全替换成slNdisPort,会出现9楼那样的错误
heaven2358 2011-03-06
  • 打赏
  • 举报
回复
我执行这个程序到
wsprintf(szFile, _T("\\\\.\\%ws"), pwszSymbolicLink);行时程序就蹦了
“EnumeHosts.exe 中的 0x75846111 处未处理的异常: 0xC0000005: 读取位置 0xcccccccc 时发生访问冲突”是什么原因?
希望大牛赐教呀~
xmjt621 2008-08-07
  • 打赏
  • 举报
回复
看看这个函数:
BOOL ProtoStartService()
{
BOOL bRet = FALSE;
SC_HANDLE hSCM = NULL, hService = NULL;
char szLinkName[] = "slNdisProt";

……
}

它指向的服务名是 slNdisProt ,我试了一下 把 packet.inf 里的注册服务部分的 packet 改成 slNdisProt 就不会报错了

把 packet.inf 直接粘给你吧,我也是刚刚学这个
;-------------------------------------------------------------------------
; PACKET.INF -- Sample Protocol Driver
;
; Copyright (c) 1993-1999, Microsoft Corporation
;-------------------------------------------------------------------------
[version]
Signature = "$Windows NT$"
Class = NetTrans
ClassGUID = {4d36e975-e325-11ce-bfc1-08002be10318}
Provider = %Msft%
DriverVer = 06/16/2004,5.00.2064

[Manufacturer]
%Msft%=MSFT

[MSFT]
%PACKET_Desc%=Install, MS_PACKET

;-------------------------------------------------------------------------
; Installation Section
;-------------------------------------------------------------------------
[Install]
AddReg=Inst_Ndi
Characteristics=0 ; Has no characterstic
CopyFiles=CpyFiles_Sys

;-------------------------------------------------------------------------
; Ndi installation support
;-------------------------------------------------------------------------
[Inst_Ndi]
HKR,Ndi,Service,,"slNdisProt" ;
HKR,Ndi,HelpText,,%slNdisProt_HelpText%
HKR, Ndi\Interfaces, UpperRange,, noupper
HKR,"Ndi\Interfaces","LowerRange",,"ndis5,ndis4"

;-------------------------------------------------------------------------
; Service installation support
;-------------------------------------------------------------------------
[Install.Services]
AddService=slNdisProt,,slNdisProt_Service_Inst

[slNdisProt_Service_Inst]
DisplayName = %slNdisProt_Desc%
ServiceType = 1 ;SERVICE_KERNEL_DRIVER
StartType = 3 ;SERVICE_DEMAND_START ; < <===这里
ErrorControl = 1 ;SERVICE_ERROR_NORMAL
ServiceBinary = %12%\ProtoDrv.sys ; < <===这里
LoadOrderGroup = "PNP_TDI"
AddReg = AddReg_slNdisProt_Service_Inst
Description = %slNdisProt_Desc%

[AddReg_slNdisProt_Service_Inst]
HKLM,"System\CurrentControlSet\Services\slNdisProt","TextModeFlags",%REG_DWORD%,0x0001
HKR,"Parameters","Test",,"Hello"

;-------------------------------------------------------------------------
; Support for removal of static registry settings
;-------------------------------------------------------------------------
[Install.Remove]
DelReg=Del_Static_Reg

[Install.Remove.Services]
DelService=slNdisProt

[Del_Static_Reg]
HKLM,"System\CurrentControlSet\Services\slNdisProt","TextModeFlags"

;-------------------------------------------------------------------------
; Declare Destination Directories for file copy/deletion
;-------------------------------------------------------------------------
[DestinationDirs]
CpyFiles_Sys = 12 ; DIRID_DRIVERS


;-------------------------------------------------------------------------
; Files to Copy/Delete - Referenced by Install and Remove sections above
;-------------------------------------------------------------------------
[CpyFiles_Sys]
ProtoDrv.sys,,,2 ; < <===这里

[Strings]
Msft = "Microsoft"
PACKET_Desc = "DDK PACKET Protocol"
PACKET_HelpText = "A non-routable protocol designed for use in small LANs."
REG_DWORD = 0x10001

wu_yanan2003 2008-01-11
  • 打赏
  • 举报
回复
呵呵,看你在到处发贴,驱动,红狼。它的源码有问题的。我改过全部编译运行通过了。
叶子海盗 2007-06-01
  • 打赏
  • 举报
回复
你有这书的代码吗?能传我一份吗?
我的邮箱zhaoyc_59211@126.com
谢谢
sdk这里有下哈.
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm
broccoli 2007-05-29
  • 打赏
  • 举报
回复
你前面的代码是不是没编译啊
要编译前面的代码
安装驱动
ps_e_udo 2007-05-26
  • 打赏
  • 举报
回复
你确认你机上装了 DDK和SDK?
"#include <ntddndis.h>" ntddndis.h要装了DDK或SDK才有
还有,装了NDIS协议驱动没?
hongming6662 2007-05-07
  • 打赏
  • 举报
回复
////////////////////////////////////////////
// protoutils.h文件




#ifndef __PROTOUTILS_H__
#define __PROTOUTILS_H__

#include "nuiouser.h"

//////////////////////////////////////
// 函数定义

BOOL ProtoStartService();
void ProtoStopService();
HANDLE ProtoOpenControlDevice();


//////////////////////////////////////
// CPROTOAdapters类,枚举绑定的适配器

#define MAX_ADAPTERS 10

class CPROTOAdapters
{
public:
BOOL EnumAdapters(HANDLE hControlDevice);

int m_nAdapters;
LPWSTR m_pwszAdapterName[MAX_ADAPTERS];
LPWSTR m_pwszSymbolicLink[MAX_ADAPTERS];
protected:
char m_buffer[MAX_ADAPTERS*256];
};

////////////////////////////////////////
// CAdapter类,管理绑定的适配器

class CAdapter
{
public:
CAdapter();
~CAdapter();

// 打开、关闭适配器
BOOL OpenAdapter(LPCWSTR pwszSymbolicLink, BOOL bAsyn = FALSE);
void CloseAdapter();

// 设置过滤属性,如NDIS_PACKET_TYPE_PROMISCUOUS、NDIS_PACKET_TYPE_DIRECTED等
BOOL SetFilter(ULONG nFilters);

// 接收、发送数据
int RecieveData(PVOID pBuffer, int nLen, LPOVERLAPPED lpOverlapped = NULL);
int SendData(PVOID pBuffer, int nLen, LPOVERLAPPED lpOverlapped = NULL);

// 重启下层NIC、管理OID信息
BOOL ResetAdapter();
BOOL ProtoRequest(PPROTOCOL_OID_DATA pOidData, BOOL bQuery);

protected:
HANDLE m_hAdapter;
};


#endif // __PROTOUTILS_H__
hongming6662 2007-05-07
  • 打赏
  • 举报
回复
////////////////////////////////////
// protoutils.cpp文件


#include <windows.h>
#include <winioctl.h>

#include <tchar.h>

#include <ntddndis.h>

#include <stdio.h>

#include "protoutils.h"


BOOL ProtoStartService()
{
BOOL bRet = FALSE;
SC_HANDLE hSCM = NULL, hService = NULL;
char szLinkName[] ="slNdisProt";

// 打开SCM管理器
hSCM = ::OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if(hSCM != NULL)
{
hService = ::OpenService(hSCM, szLinkName, SERVICE_ALL_ACCESS);
if(hService != NULL)
{
if(!::StartService(hService, 0, NULL))
{
int nError = ::GetLastError();
if(nError == ERROR_SERVICE_ALREADY_RUNNING)
{
bRet = TRUE;
}
}
else
{
bRet = TRUE;
}
}
}

if(hService != NULL)
::CloseServiceHandle(hService);
if(hSCM != NULL)
::CloseServiceHandle(hSCM);

if(bRet)
::Sleep(50);
return bRet;
}

void ProtoStopService()
{
SC_HANDLE hSCM = NULL, hService = NULL;
char szLinkName[] = "slNdisProt";

// 打开SCM管理器
hSCM = ::OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if(hSCM != NULL)
{
hService = ::OpenService(hSCM, szLinkName, SERVICE_ALL_ACCESS);
if(hService != NULL)
{
// 等待服务完全停止运行
SERVICE_STATUS ss;
::ControlService(hService, SERVICE_CONTROL_STOP, &ss);
}
}

if(hService != NULL)
::CloseServiceHandle(hService);
if(hSCM != NULL)
::CloseServiceHandle(hSCM);
}

HANDLE ProtoOpenControlDevice()
{
// 打开驱动程序所控制设备的句柄
HANDLE hFile = ::CreateFile(
_T("\\\\.\\slNdisProt"),
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);

return hFile;
}

BOOL CPROTOAdapters::EnumAdapters(HANDLE hControlDevice)
{
DWORD dwBufferLength = sizeof(m_buffer);
BOOL bRet = ::DeviceIoControl(hControlDevice, IOCTL_ENUM_ADAPTERS,
NULL, 0, m_buffer, dwBufferLength, &dwBufferLength, NULL);
if(!bRet)
return FALSE;

// 保存适配器数量
m_nAdapters = (ULONG)((ULONG*)m_buffer)[0];

// 下面从m_buffer中获取适配器名称和符号连接名称
// 指向设备名称
WCHAR *pwsz = (WCHAR *)((ULONG *)m_buffer + 1);
int i = 0;
m_pwszAdapterName[i] = pwsz;
while(*(pwsz++) != NULL)
{
while(*(pwsz++) != NULL)
{ ; }

m_pwszSymbolicLink[i] = pwsz + 12; // pwsz 指向"\DosDevices\Packet_{}", 加12是为了去掉"\DosDevices\"

while(*(pwsz++) != NULL)
{ ; }

if(++i >= MAX_ADAPTERS)
break;

m_pwszAdapterName[i] = pwsz;
}

return TRUE;
}

//////////////////////////////////////////////////////////

CAdapter::CAdapter()
{
m_hAdapter = INVALID_HANDLE_VALUE;
}

CAdapter::~CAdapter()
{
CloseAdapter();
}

BOOL CAdapter::OpenAdapter(LPCWSTR pwszSymbolicLink, BOOL bAsyn)
{
char szFile[1024];
wsprintf(szFile, _T("\\\\.\\%ws"), pwszSymbolicLink);

// 打开到驱动程序所控制设备的句柄
m_hAdapter = ::CreateFile(szFile,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
bAsyn ? FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED : FILE_ATTRIBUTE_NORMAL,
NULL);
int n = ::GetLastError();
return m_hAdapter != INVALID_HANDLE_VALUE;
}

void CAdapter::CloseAdapter()
{
if(m_hAdapter != INVALID_HANDLE_VALUE)
{
::CloseHandle(m_hAdapter);
m_hAdapter = INVALID_HANDLE_VALUE;
}
}

BOOL CAdapter::ProtoRequest(PPROTOCOL_OID_DATA pOidData, BOOL bQuery)
{
if(m_hAdapter == INVALID_HANDLE_VALUE)
return FALSE;
DWORD dw;
BOOL bRet = ::DeviceIoControl(
m_hAdapter, bQuery ? IOCTL_PROTOCOL_QUERY_OID : IOCTL_PROTOCOL_SET_OID,
pOidData, sizeof(PROTOCOL_OID_DATA) -1 + pOidData->Length,
pOidData, sizeof(PROTOCOL_OID_DATA) -1 + pOidData->Length, &dw, NULL);

return bRet;
}

BOOL CAdapter::SetFilter(ULONG nFilters)
{
PPROTOCOL_OID_DATA pOidData = (PPROTOCOL_OID_DATA)
::GlobalAlloc(GPTR, (sizeof(PROTOCOL_OID_DATA) + sizeof(ULONG) - 1));

pOidData->Oid = OID_GEN_CURRENT_PACKET_FILTER;
pOidData->Length = sizeof(ULONG);
*((PULONG)pOidData->Data) = nFilters;

BOOL bRet = ProtoRequest(pOidData, FALSE);

::GlobalFree(pOidData);
return bRet;
}

BOOL CAdapter::ResetAdapter()
{
DWORD dw;
BOOL bRet = ::DeviceIoControl(m_hAdapter, IOCTL_PROTOCOL_RESET, NULL, 0, NULL, 0, &dw, NULL);
return bRet;
}

int CAdapter::RecieveData(PVOID pBuffer, int nLen, LPOVERLAPPED lpOverlapped)
{
DWORD dwRead;
if(::ReadFile(m_hAdapter, pBuffer, nLen, &dwRead, lpOverlapped))
return dwRead;
else
return -1;
}

int CAdapter::SendData(PVOID pBuffer, int nLen, LPOVERLAPPED lpOverlapped)
{
DWORD dwWrite;
if(::WriteFile(m_hAdapter, pBuffer, nLen, &dwWrite, lpOverlapped))
return dwWrite;
else
return -1;
}
hongming6662 2007-05-07
  • 打赏
  • 举报
回复
运行结果
-------------------- 本地主机信息 -----------------------

IP Address : 192.168.0.23
Subnet Mask : 255.255.255.0
Default Gateway : 192.168.0.1
MAC Address : 00-13-8F-BC-98-4F


ProtoStartService() failed 1060

18,357

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧