青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 27,  comments - 68,  trackbacks - 0
今天移植以前用DriverWorks編寫的一個驅動到x64平臺上,編譯時沒有什么問題,但鏈接的時候發現無法找到KPciConfiguration::Enumerate,經過一段時間的探索,找到了一種臨時解決方案。

由于
KPciConfiguration 的構造函數中也使用了這個函數,而且程序中大量使用了KPciConfiguration類,這意味著要大量修改代碼,真是頭痛

檢查DriverWorks的源程序 Kpcicfg.cpp 后發現,在 AMD64 模式下,KPciConfiguration::Enumerate函數是不被編譯的:
#if?!?_WDM_
#if?!(defined(_IA64_)?||?defined(_AMD64_))

BOOLEAN?KPciConfiguration::Enumerate(
????KPciSlot
&?slot,
????PUSHORT?VendorId,
????PUSHORT?DeviceId)
{
????ULONG?status;
????UCHAR?headtype;

????
struct?{
????????USHORT?VendorID;
????????USHORT?DeviceID;
????}
?slotdata;


????
if?(?(slot.Slot()?!=?0xffffffff)?||?(slot.Bus()?!=?0)?)
????
{
????????
//?determine?if?the?current?slot?is?single?function?device
????????status?=?HalGetBusDataByOffset(
????????????PCIConfiguration,
????????????slot.Bus(),
????????????slot.Slot(),
????????????
&headtype,
????????????HeaderOffset(HeaderType),
????????????
1);

????????
if?(?(slot.Function()?==?0)?&&
?????????????(status?
!=?0)?&&
?????????????(status?
!=?2)?&&
?????????????((headtype?
&?0x80)==0)?)?//?bit?7?of?header?type?is?1?for?multi
????????{
????????????slot.IncrementDevice();
????????}

????????
else
????????
{
????????????slot.Increment();
????????}

????}

????
else
????
{
????????slot.Increment();
????}


????
while?(TRUE)
????
{
????????status?
=?HalGetBusData(PCIConfiguration,?slot.Bus(),?slot.Slot(),?&slotdata,?4);
????????
????????
if?(status?==?0)
????????
{
????????????
if?(?slot.Bus()?==?255?)
????????????
{
????????????????
return?FALSE;
????????????}

????????????
else
????????????
{
????????????????slot.IncrementBus();
????????????}

????????????
continue;
????????}

????????
else?if?(status?==?2)
????????
{
????????????slot.Increment();
????????????
continue;
????????}

????????
else
????????
{
????????????
*VendorId?=?slotdata.VendorID;
????????????
*DeviceId?=?slotdata.DeviceID;
????????????
return?TRUE;
????????}

????}

}


#endif

如果去掉#if語句強行編譯,發現原來是因為HalGetBusData函數不被x64支持,所以不能編譯成功。在MSDN的文檔中的確提到這個函數是過時的,建議使用即插即用 (PnP) 管理器的 IRP_MN_START_DEVICE 請求來獲取這些資源,在中文知識庫中還可以找到一個例子:http://support.microsoft.com/?scid=kb;zh-cn;253232。在網上還找到另一個英文的例子http://www.hollistech.com/Resources/Misc%20articles/getbusdata.doc

不過要全部改寫代碼,擔心時間不夠,所以想到另外一個臨時解決方案,在x64下
HalGetBusDataByOffset仍然是支持的,所以利用HalGetBusDataByOffset代替HalGetBusData,暫時修改函數如下:

#if?!?_WDM_
//#if?!(defined(_IA64_)?||?defined(_AMD64_))

BOOLEAN?KPciConfiguration::Enumerate(
????KPciSlot
&?slot,
????PUSHORT?VendorId,
????PUSHORT?DeviceId)
{
????ULONG?status;
????UCHAR?headtype;

????
struct?{
????????USHORT?VendorID;
????????USHORT?DeviceID;
????}
?slotdata;


????
if?(?(slot.Slot()?!=?0xffffffff)?||?(slot.Bus()?!=?0)?)
????
{
????????
//?determine?if?the?current?slot?is?single?function?device
????????status?=?HalGetBusDataByOffset(
????????????PCIConfiguration,
????????????slot.Bus(),
????????????slot.Slot(),
????????????
&headtype,
????????????HeaderOffset(HeaderType),
????????????
1);

????????
if?(?(slot.Function()?==?0)?&&
?????????????(status?
!=?0)?&&
?????????????(status?
!=?2)?&&
?????????????((headtype?
&?0x80)==0)?)?//?bit?7?of?header?type?is?1?for?multi
????????{
????????????slot.IncrementDevice();
????????}

????????
else
????????
{
????????????slot.Increment();
????????}

????}

????
else
????
{
????????slot.Increment();
????}


????
while?(TRUE)
????
{
//????????status?=?HalGetBusData(PCIConfiguration,?slot.Bus(),?slot.Slot(),?&slotdata,?4);
????????status?=?HalGetBusDataByOffset(PCIConfiguration,?slot.Bus(),?slot.Slot(),?&slotdata,?0,?4);
????????
????????
if?(status?==?0)
????????
{
????????????
if?(?slot.Bus()?==?255?)
????????????
{
????????????????
return?FALSE;
????????????}

????????????
else
????????????
{
????????????????slot.IncrementBus();
????????????}

????????????
continue;
????????}

????????
else?if?(status?==?2)
????????
{
????????????slot.Increment();
????????????
continue;
????????}

????????
else
????????
{
????????????
*VendorId?=?slotdata.VendorID;
????????????
*DeviceId?=?slotdata.DeviceID;
????????????
return?TRUE;
????????}

????}

}


//#endif
?

目前從測試的結果來看,這樣做是可以運行的。但是 HalGetBusDataByOffset 也是過時的,不推薦使用的函數,將來有時間還是按照微軟的建議將程序徹底改寫。

posted on 2006-07-09 16:32 zealsoft 閱讀(868) 評論(0)  編輯 收藏 引用 所屬分類: 驅動開發
歡迎訪問我的學術博客

<2010年5月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

常用鏈接

留言簿(13)

隨筆分類(28)

隨筆檔案(27)

搜索

  •  

積分與排名

  • 積分 - 58451
  • 排名 - 397

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国产视频a| 激情久久久久久| 另类av导航| 久久精品91| 午夜免费电影一区在线观看| 在线观看一区视频| 亚洲国产日韩美| 99国产精品| 亚洲一区二区三区国产| 欧美专区在线观看| 欧美粗暴jizz性欧美20| 亚洲久久成人| 亚洲午夜伦理| 亚洲国产欧美日韩精品| 国产精品毛片在线| 国产精品免费一区豆花| 国产日韩欧美中文| 在线电影国产精品| 亚洲一级一区| 久久亚洲风情| 亚洲精品国产精品久久清纯直播 | 在线视频亚洲一区| 99热免费精品| 久久精品视频播放| 欧美精品福利在线| 欧美精品导航| 国产一区二区三区高清播放| 日韩一本二本av| 久久这里只精品最新地址| 99精品欧美一区| 另类天堂av| 国产欧美一二三区| 在线视频亚洲| 欧美电影免费观看大全| 亚洲曰本av电影| 欧美人与性动交α欧美精品济南到 | 日韩天堂在线视频| 午夜精品久久久久久久99水蜜桃| 老色鬼精品视频在线观看播放| 亚洲欧美日本国产有色| 欧美在线一二三| 日韩午夜高潮| 欧美国产成人精品| 一区二区三区亚洲| 久久爱另类一区二区小说| 亚洲精选一区| 欧美精品色综合| 亚洲人成77777在线观看网| 久久中文字幕一区二区三区| 性欧美video另类hd性玩具| 国产精品对白刺激久久久| 在线一区二区三区四区| 亚洲人成毛片在线播放| 欧美韩日一区二区三区| 亚洲国产免费| 欧美成人一区二区三区| 久久免费少妇高潮久久精品99| 免费欧美电影| 狠狠干综合网| 麻豆精品91| 久久超碰97中文字幕| 国产综合色一区二区三区| 久久久精品国产99久久精品芒果| 久久精品人人| 午夜国产不卡在线观看视频| 亚洲一区二区视频在线| 欧美激情第五页| 欧美专区第一页| 国产日韩欧美精品综合| 久久丁香综合五月国产三级网站| 欧美一区二区三区在| 99国产成+人+综合+亚洲欧美| 亚洲视频电影图片偷拍一区| 欧美日韩国产成人在线| 亚洲成人在线观看视频| 欧美福利视频| 欧美日韩视频不卡| 亚洲欧美成aⅴ人在线观看| 亚洲欧美日韩中文视频| 激情自拍一区| 亚洲欧洲日产国产网站| 国产精品免费视频观看| 久久色中文字幕| 欧美77777| 亚洲欧美在线一区| 久久久久久久精| 99一区二区| 西瓜成人精品人成网站| 亚洲欧洲日本国产| 亚洲午夜激情| 亚洲精品1234| 中文亚洲免费| 在线播放不卡| 亚洲视频一区二区| 影音先锋在线一区| 日韩午夜在线观看视频| 国模私拍视频一区| 亚洲美女av网站| 在线日韩欧美视频| 中文国产成人精品久久一| 136国产福利精品导航| 中文在线不卡| 亚洲日本在线视频观看| 欧美一区二区三区四区高清| 9国产精品视频| 久久夜色撩人精品| 欧美在线一二三| 欧美亚日韩国产aⅴ精品中极品| 91久久精品一区| 日韩一级网站| 亚洲激情第一页| 欧美伊人久久久久久久久影院| 国产精品日韩欧美一区二区| 蜜臀va亚洲va欧美va天堂| 国产精品毛片在线看| 亚洲人成在线免费观看| 在线观看av一区| 香蕉久久夜色精品国产使用方法| 国产精品成人免费| 欧美激情精品久久久久久大尺度 | 一本色道久久精品| 一区久久精品| 久久精品99| 亚洲亚洲精品三区日韩精品在线视频| 久久午夜av| 国产精品捆绑调教| 亚洲电影有码| 亚洲国产精彩中文乱码av在线播放| 免费成人激情视频| 国产日韩精品一区二区浪潮av| 午夜精品成人在线视频| 欧美激情视频一区二区三区不卡| 日韩视频在线一区| 久久成人资源| 久久在线视频在线| 好看的亚洲午夜视频在线| 欧美一区视频在线| 久久精品理论片| 国产一区二区三区高清在线观看| 免费永久网站黄欧美| 国产一区视频在线看| 欧美一站二站| 久久综合99re88久久爱| 精品51国产黑色丝袜高跟鞋| 亚洲伦理精品| 欧美国产综合| 国产麻豆一精品一av一免费| 极品日韩av| 久久久久se| 国产在线高清精品| 久久久久久一区二区| 免费视频一区| 亚洲欧洲另类| 欧美特黄一级| 午夜国产精品影院在线观看| 久久久久久91香蕉国产| 在线观看91久久久久久| 欧美大胆人体视频| 制服丝袜激情欧洲亚洲| 老司机成人在线视频| 亚洲美女色禁图| 国产精品一区二区三区观看| 久久精品国产欧美亚洲人人爽| 亚洲国产精品尤物yw在线观看| 91久久在线| 亚洲一二三区视频在线观看| 国产在线观看精品一区二区三区| 亚洲国产精品va在线看黑人| 亚洲精品免费一二三区| 国产精品国产自产拍高清av王其| 欧美大色视频| 一区二区精品在线| 国产有码一区二区| 欧美精品在线一区| 亚洲欧美日韩直播| 亚洲激情一区二区| 久久精品免费电影| 一区二区三区www| 国产日本欧美一区二区三区在线 | 欧美一区国产一区| 狠狠噜噜久久| 国产精品久久波多野结衣| 久久一区二区精品| 一本色道久久88亚洲综合88| 欧美成人福利视频| 亚洲欧美日韩直播| 亚洲日本电影| 91久久精品日日躁夜夜躁欧美 | 欧美大片在线看免费观看| 99热这里只有成人精品国产| 欧美77777| 久久色在线播放| 久久高清国产| 亚洲欧美日韩视频二区| 亚洲伦理网站| 亚洲精品国产精品国自产观看| 久久综合久久88| 午夜精品久久久久久久男人的天堂 | 亚洲欧美日韩成人| 亚洲国产精品成人综合|