📄 initproc.c
字号:
// Values for [HKEY_LOCAL_MACHINE\Comm\CF8381P]
REG_VALUE_DESCR CommCF8381PKeyValues[] = {
{(TEXT ("DisplayName")), REG_SZ, (PBYTE) (TEXT("Marvell CF8381P Wireless Card"))},
{(TEXT ("Group")), REG_SZ, (PBYTE) (TEXT("NDIS"))},
{(TEXT ("ImagePath")), REG_SZ, (PBYTE) (TEXT("CF8381P.dll"))},
{NULL, 0, NULL}
};
// [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\PCI\Template\CF8381P]
REG_VALUE_DESCR DriversCF8381PPciKeyValues[] = {
{(TEXT ("Dll")), REG_SZ, (PBYTE) (TEXT("NDIS.dll"))},
{(TEXT ("Class")), REG_DWORD, (PBYTE) 2},
{(TEXT ("SubClass")), REG_DWORD, (PBYTE) 0x80},
{(TEXT ("ProgIF")), REG_DWORD, (PBYTE) 0},
{(TEXT ("VendorID")), REG_MULTI_SZ, (PBYTE) (TEXT("1638"))},
{(TEXT ("DeviceID")), REG_MULTI_SZ, (PBYTE) (TEXT("1100"))},
{(TEXT ("Entry")), REG_SZ, (PBYTE) (TEXT("NdisPCIBusDeviceInit"))},
// {(TEXT ("Transceiver")), REG_DWORD, (PBYTE) 3},
{(TEXT ("IsrDll")), REG_SZ, (PBYTE) (TEXT("giisr.dll"))},
{(TEXT ("IsrHandler")), REG_SZ, (PBYTE) (TEXT("ISRHandler"))},
{(TEXT ("PortIsIO")), REG_DWORD, (PBYTE) 0},
{(TEXT ("PortOffset")), REG_DWORD, (PBYTE) 0},
{(TEXT ("PortSize")), REG_DWORD, (PBYTE) 0},
{(TEXT ("PortMask")), REG_DWORD, (PBYTE) 0},
{NULL, 0, NULL}
};
PREG_VALUE_DESCR Values[] = {
// CompactFlash interface
PcmciaCF8381PKeyValues,
PcmciaDetectKeyValues,
// PCI interface
DriversCF8381PPciKeyValues,
CommCF8381PKeyValues,
};
LPWSTR KeyNames[] = {
(TEXT ("Drivers\\PCMCIA\\CF8381P")),
(TEXT ("Drivers\\PCMCIA\\Detect\\101")),
(TEXT ("Drivers\\BuiltIn\\PCI\\Template\\CF8381P")),
(TEXT ("Comm\\CF8381P")),
};
#endif // #ifdef MRV_CHIP_8381P
#ifdef MRV_CHIP_8305
// Values for [HKEY_LOCAL_MACHINE\Drivers\PCMCIA\EAGLEND5]
REG_VALUE_DESCR PcmciaEAGLEND5KeyValues[] = {
{(TEXT ("Dll")), REG_SZ, (PBYTE) (TEXT("ndis.dll"))},
{(TEXT ("Prefix")), REG_SZ, (PBYTE) (TEXT("NDS"))},
{(TEXT ("Miniport")), REG_SZ, (PBYTE) (TEXT("EAGLEND5"))},
{NULL, 0, NULL}
};
// Values for [HKEY_LOCAL_MACHINE\Drivers\PCMCIA\Detect\101]
REG_VALUE_DESCR PcmciaDetectKeyValues[] = {
{(TEXT ("Dll")), REG_SZ, (PBYTE) (TEXT("eaglend5.dll"))},
{(TEXT ("Entry")), REG_SZ, (PBYTE) (TEXT("DetectMrvDrv"))},
{NULL, 0, NULL}
};
// PCI interface
// Values for [HKEY_LOCAL_MACHINE\Comm\EAGLEND5]
REG_VALUE_DESCR CommEAGLEND5KeyValues[] = {
{(TEXT ("DisplayName")), REG_SZ, (PBYTE) (TEXT("Marvell CF-25P Wireless Card"))},
{(TEXT ("Group")), REG_SZ, (PBYTE) (TEXT("NDIS"))},
{(TEXT ("ImagePath")), REG_SZ, (PBYTE) (TEXT("EAGLEND5.dll"))},
{NULL, 0, NULL}
};
// [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\PCI\Template\EAGLEND5]
REG_VALUE_DESCR DriversEAGLEND5PciKeyValues[] = {
{(TEXT ("Dll")), REG_SZ, (PBYTE) (TEXT("NDIS.dll"))},
{(TEXT ("Class")), REG_DWORD, (PBYTE) 2},
{(TEXT ("SubClass")), REG_DWORD, (PBYTE) 0x80},
{(TEXT ("ProgIF")), REG_DWORD, (PBYTE) 0},
{(TEXT ("VendorID")), REG_MULTI_SZ, (PBYTE) (TEXT("1638"))},
{(TEXT ("DeviceID")), REG_MULTI_SZ, (PBYTE) (TEXT("1100"))},
{(TEXT ("Entry")), REG_SZ, (PBYTE) (TEXT("NdisPCIBusDeviceInit"))},
// {(TEXT ("Transceiver")), REG_DWORD, (PBYTE) 3},
{(TEXT ("IsrDll")), REG_SZ, (PBYTE) (TEXT("giisr.dll"))},
{(TEXT ("IsrHandler")), REG_SZ, (PBYTE) (TEXT("ISRHandler"))},
{(TEXT ("PortIsIO")), REG_DWORD, (PBYTE) 0},
{(TEXT ("PortOffset")), REG_DWORD, (PBYTE) 0},
{(TEXT ("PortSize")), REG_DWORD, (PBYTE) 0},
{(TEXT ("PortMask")), REG_DWORD, (PBYTE) 0},
{NULL, 0, NULL}
};
PREG_VALUE_DESCR Values[] = {
// CompactFlash interface
PcmciaEAGLEND5KeyValues,
PcmciaDetectKeyValues,
// PCI interface
DriversEAGLEND5PciKeyValues,
CommEAGLEND5KeyValues,
};
LPWSTR KeyNames[] = {
(TEXT ("Drivers\\PCMCIA\\EAGLEND5")),
(TEXT ("Drivers\\PCMCIA\\Detect\\101")),
(TEXT ("Drivers\\BuiltIn\\PCI\\Template\\EAGLEND5")),
(TEXT ("Comm\\EAGLEND5")),
};
#endif
#endif // UNDER_CE
#define SIZE_OF_REG_TAB (sizeof(MrvDrvRegInfoTab)/sizeof(REGINFOTAB))
/*
===============================================================================
CODED PUBLIC PROCEDURES
===============================================================================
*/
/* Add the coded public routines here, each with their own prologue. */
// jeff.spurgat 2003-04-02
// DllEntry is required for WinCE driver
#ifdef UNDER_CE
//-----------------------------------------------------------------------------
// Function : DllEntry
// This function provides the DLL entry point required for the WinCE
// driver. Since all network drivers are implemented as DLL's in WinCE,
// this entry point is needed.
//
// Inputs : HANDLE hDLL, handle identifying this DLL.
//
// DWORD dwReason, reason of invocation of this entry point.
//
// LPVOID lpReserved, reserved param
//
// Outputs : None.
//
// Returns : TRUE - don't really know what this function is used
// for, it has basically been reproduced here from
// the WinCE sample driver. Just safer to return TRUE
// than FALSE :-)
//
//-----------------------------------------------------------------------------
BOOL __stdcall
DllEntry( HANDLE hDLL,
DWORD dwReason,
LPVOID lpReserved )
{
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
DEBUGMSG(1, (TEXT("MRVDRVND5: DLL_PROCESS_ATTACH\n")));
///RETAILMSG(1, (TEXT("MRVDRVND5: DLL_PROCESS_ATTACH \r\n")));
DisableThreadLibraryCalls ((HMODULE)hDLL);
break;
case DLL_PROCESS_DETACH:
DEBUGMSG(1, (TEXT("MRVDRVND5: DLL_PROCESS_DETACH\n")));
///RETAILMSG(1, (TEXT("MRVDRVND5: DLL_PROCESS_DETACH \r\n")));
break;
}
return TRUE;
}
#endif
// jeff.spurgat 2003-04-02
// Added AddKeyValues() function, which is used by Install_Driver() to set
// registry key entries. This function was taken from samples in Platform
// Builder.
#ifdef UNDER_CE
/****************************************************************************
* Function : AddKeyValues
* This function adds the specified key and its value into the
* registry under HKEY_LOCAL_MACHINE.
*
* Inputs : LPWSTR KeyName, name of the key to be added to the registry.
*
* PREG_VALUE_DESCR Vals, value associated with this key.
*
* Outputs : None.
*
* NOTE : 1. This function only supports REG_MULTI_SZ strings with
* one item.
* 2. Assumes that input Value for the specified Key is NULL
* terminated.
*
* Returns : TRUE - if successfully added Key & Value
* FALSE - if failed to add Key & Value
*
***************************************************************************/
BOOL
AddKeyValues (LPWSTR KeyName, PREG_VALUE_DESCR Vals)
{
DWORD Status;
DWORD dwDisp;
HKEY hKey;
PREG_VALUE_DESCR pValue;
DWORD ValLen;
PBYTE pVal;
DWORD dwVal;
LPWSTR pStr;
Status = RegCreateKeyEx (HKEY_LOCAL_MACHINE, KeyName, 0, NULL, REG_OPTION_NON_VOLATILE, 0, NULL, &hKey, &dwDisp);
if (Status != ERROR_SUCCESS)
return (FALSE);
pValue = Vals;
while (pValue->val_name)
{
switch (pValue->val_type)
{
case REG_DWORD:
pVal = (PBYTE)&dwVal;
dwVal = (DWORD)pValue->val_data;
ValLen = sizeof (DWORD);
break;
case REG_SZ:
pVal = (PBYTE)pValue->val_data;
ValLen = (wcslen ((LPWSTR)pVal) + 1) * sizeof (WCHAR);
break;
case REG_MULTI_SZ:
dwVal = wcslen ((LPWSTR)pValue->val_data);
ValLen = (dwVal + 2) * sizeof (WCHAR);
pVal = LocalAlloc (LPTR, ValLen);
if (pVal == NULL)
{
RegCloseKey (hKey);
return (FALSE);
}
wcscpy ((LPWSTR)pVal, (LPWSTR)pValue->val_data);
pStr = (LPWSTR)pVal + dwVal;
pStr[1] = 0;
break;
}
Status = RegSetValueEx (hKey, pValue->val_name, 0, pValue->val_type, pVal, ValLen);
if (pValue->val_type == REG_MULTI_SZ)
LocalFree (pVal);
if (Status != ERROR_SUCCESS)
{
RegCloseKey (hKey);
return (FALSE);
}
pValue++;
}
RegCloseKey (hKey);
return (TRUE);
}
#endif // UNDER_CE
// jeff.spurgat 2003-04-02
// Install_Driver is useful for WinCE drivers of PnP devices to install the PnP
// registry settings. This function was taken from samples in Platform Builder.
#ifdef UNDER_CE
//-----------------------------------------------------------------------------
// Description:
// The Install_Driver routine sets up the registry keys and values required to
// install this DLL as a Windows CE plug and play network driver.
//
// Arguments:
// lpPnpId This is a device's plug & play identifier string. If this
// is a driver for a PCI adapter and adapter detection is done
// by the driver, this parameter is ignored.
// lpRegPath This is a buffer which contains the newly installed
// driver's device keys under HKEY_LOCAL_MACHINE in the registry.
// Windows CE will attempt to load the newly installed device
// driver upon completion of its Install_Driver function.
// cRegPathSize Number of bytes in lpRegPath.
//
// Return Value:
// lpRegPath if successful, NULL for failure.
//
//-----------------------------------------------------------------------------
LPWSTR
Install_Driver (LPWSTR lpPnpId, LPWSTR lpRegPath, DWORD cRegPathSize)
{
UINT uiIndex;
//DEBUGMSG(1, (TEXT("MRVDRVND5: Install_Driver PnpId=%s RegPath=%s RegPathSize=%d.\n"), lpPnpId, lpRegPath, cRegPathSize));
DBGPRINT(DBG_LOAD ,("MRVDRVND5: Install_Driver PnpId=%s RegPath=%s RegPathSize=%d.\n", lpPnpId, lpRegPath, cRegPathSize));
for (uiIndex = 0; uiIndex < (sizeof (KeyNames) / sizeof (LPWSTR)); uiIndex++)
{
if (!AddKeyValues(KeyNames[uiIndex], Values[uiIndex]))
{
//
// Clean up after failure.
//
for (uiIndex = 0; uiIndex < (sizeof (KeyNames) / sizeof (LPWSTR)); uiIndex++)
RegDeleteKey(HKEY_LOCAL_MACHINE, KeyNames[uiIndex]);
//DEBUGMSG(1, (TEXT("MRVDRVND5: Install_Driver failed.\n")));
DBGPRINT(DBG_LOAD , ("MRVDRVND5: Install_Driver failed.\n"));
return (NULL);
}
}
//
// Return success
//
wcscpy(lpRegPath, KeyNames[0]);
//DEBUGMSG(1, (TEXT("MRVDRVND5: Install_Driver success.\n")));
DBGPRINT(DBG_LOAD , ("MRVDRVND5: Install_Driver success.\n"));
return (lpRegPath);
}
#endif // UNDER_CE
// jeff.spurgat 2003-04-05
// For a generic PC Card driver, which is one that can drive an
// entire class of PC Cards adhering to a specified operating
// standard, you need an additional entry point in the dynamic-link
// library (DLL) for a detection function. The Device Manager uses
// the detection function when a user inserts an unknown PC Card
// with no Plug and Play identifier.
#ifdef UNDER_CE
//-----------------------------------------------------------------------------
// Description:
// Detects device in system.
//
// Arguments:
// hSock // Socket containing the card to detect
// DevType // Device type from CISTPL_FUNCID or 0xff for unknown
// DevKey // Buffer to put name of device key
// DevKeyLen // Number of characters in buffer parameter
//
// Return Value:
//
//-----------------------------------------------------------------------------
LPTSTR
DetectMrvDrv(
CARD_SOCKET_HANDLE hSock,
UCHAR DevType,
LPTSTR DevKey,
DWORD DevKeyLen)
{
HANDLE hPcmciaDll;
GETFIRSTTUPLE pfnGetFirstTuple;
GETTUPLEDATA pfnGetTupleData;
DWORD cerr;
UCHAR buf[sizeof(CARD_DATA_PARMS) + 256];
PCARD_DATA_PARMS pParms;
PCARD_TUPLE_PARMS pTuple;
PUCHAR pData;
LPWSTR lpwstrRet = NULL;
DBGPRINT(DBG_ALLEN | DBG_SP, ("++ DetectMrvDrv\n"));
///RETAILMSG(1, (TEXT("++ DetectMrvDrv() \r\n")));
if (DevType!=PCCARD_TYPE_NETWORK)
{
DBGPRINT(DBG_ALLEN | DBG_SP | DBG_ALLEN, ("MRVDRVND5: DetectMrvDrv incorrect device type.\n"));
return NULL;
}
hPcmciaDll = LoadLibrary(TEXT("PCMCIA.DLL"));
if (hPcmciaDll == NULL)
{
DBGPRINT(DBG_ALLEN | DBG_SP | DBG_ALLEN, ("MRVDRVND5: DetectMrvDrv PCMCIA.DLL load failed.\n"));
return NULL;
}
pfnGetFirstTuple = (GETFIRSTTUPLE) GetProcAddress(hPcmciaDll, TEXT("CardGetFirstTuple"));
pfnGetTupleData = (GETTUPLEDATA) GetProcAddress(hPcmciaDll, TEXT("CardGetTupleData"));
if ((pfnGetFirstTuple == NULL) || (pfnGetTupleData == NULL))
{
DBGPRINT(DBG_ALLEN | DBG_SP | DBG_ALLEN, ("MRVDRVND5: DetectMrvDrv GetProcAddress failed.\n"));
FreeLibrary(hPcmciaDll);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -