//================================================================= // // Cim32NetAPI.cpp // // Copyright (c) 1999-2001 Microsoft Corporation, All Rights Reserved // //================================================================= #include "precomp.h" #ifdef WIN9XONLY #include #include "refptr.h" #include "poormansresource.h" #include "resourcedesc.h" #include "cfgmgrdevice.h" #include "irqdesc.h" #include #include "DllWrapperCreatorReg.h" // {318C0D32-D27D-11d2-9120-0060081A46FD} static const GUID g_guidCim32NetApi = {0x318c0d32, 0xd27d, 0x11d2, {0x91, 0x20, 0x0, 0x60, 0x8, 0x1a, 0x46, 0xfd}}; static const TCHAR g_tstrCim32Net[] = _T("CIM32NET.DLL"); /****************************************************************************** * Register this class with the CResourceManager. *****************************************************************************/ CDllApiWraprCreatrReg MyRegisteredCim32NetWrapper; /****************************************************************************** * Constructor ******************************************************************************/ CCim32NetApi::CCim32NetApi(LPCTSTR a_tstrWrappedDllName) : CDllWrapperBase(a_tstrWrappedDllName), m_pfnGetWin9XBiosUnit(NULL), m_pfnGetWin9XPartitionTable(NULL), m_pfnGetWin9XDriveParams(NULL), m_pfnGetWin9XUseInfo1(NULL), m_pfnGetWin9XNetUseEnum(NULL), m_pfnGetWin9XUserInfo1(NULL), m_pfnGetWin9XUserInfo2(NULL), m_pfnGetWin9XUserInfo1Ex(NULL), m_pfnGetWin9XUserInfo2Ex(NULL), m_pfnGetWin9XConfigManagerStatus(NULL), m_pfnGetWin9XFreeSpace(NULL), m_pfnCIM32THK_CM_Locate_DevNode(NULL), m_pfnCIM32THK_CM_Get_Child(NULL), m_pfnCIM32THK_CM_Get_Sibling(NULL), m_pfnCIM32THK_CM_Read_Registry_Value(NULL), m_pfnCIM32THK_CM_Get_DevNode_Status(NULL), m_pfnCIM32THK_CM_Get_Device_ID(NULL), m_pfnCIM32THK_CM_Get_Device_ID_Size(NULL), m_pfnCIM32THK_CM_Get_First_Log_Conf(NULL), m_pfnCIM32THK_CM_Get_Next_Res_Des(NULL), m_pfnCIM32THK_CM_Get_Res_Des_Data_Size(NULL), m_pfnCIM32THK_CM_Get_Res_Des_Data(NULL), m_pfnCIM32THK_CM_Get_Bus_Info(NULL), m_pfnCIM32THK_CM_Get_Parent(NULL), m_pfnCIM32THK_CM_Query_Arbitrator_Free_Data(NULL), m_pfnCIM32THK_CM_Delete_Range(NULL), m_pfnCIM32THK_CM_First_Range(NULL), m_pfnCIM32THK_CM_Next_Range(NULL), m_pfnCIM32THK_CM_Free_Range_List(NULL) { } /****************************************************************************** * Destructor *****************************************************************************/ CCim32NetApi::~CCim32NetApi() { } /****************************************************************************** * Initialization function to check that we obtained function addresses. * Init should fail only if the minimum set of functions was not available; * functions added in later versions may or may not be present - it is the * client's responsibility in such cases to check, in their code, for the * version of the dll before trying to call such functions. Not doing so * when the function is not present will result in an AV. * * The Init function is called by the WrapperCreatorRegistation class. *****************************************************************************/ bool CCim32NetApi::Init() { bool fRet = LoadLibrary(); if(fRet) { m_pfnGetWin9XBiosUnit = (PFN_CIM32NET_GET_WIN_9_X_BIOS_UNIT) GetProcAddress("GetWin9XBiosUnit"); m_pfnGetWin9XPartitionTable = (PFN_CIM32NET_GET_WIN_9_X_PARTITION_TABLE) GetProcAddress("GetWin9XPartitionTable"); m_pfnGetWin9XDriveParams = (PFN_CIM32NET_WIN_9_X_DRIVE_PARAMS) GetProcAddress("GetWin9XDriveParams"); m_pfnGetWin9XUseInfo1 = (PFN_CIM32NET_GET_WIN_9_X_USE_INFO_1) GetProcAddress("GetWin9XUseInfo1"); m_pfnGetWin9XNetUseEnum = (PFN_CIM32NET_GET_WIN_9_X_NET_USE_ENUM) GetProcAddress("GetWin9XNetUseEnum"); m_pfnGetWin9XUserInfo1 = (PFN_CIM32NET_GET_WIN_9_X_USER_INFO_1) GetProcAddress("GetWin9XUserInfo1"); m_pfnGetWin9XUserInfo2 = (PFN_CIM32NET_GET_WIN_9_X_USER_INFO_2) GetProcAddress("GetWin9XUserInfo2"); m_pfnGetWin9XUserInfo1Ex = (PFN_CIM32NET_GET_WIN_9_X_USER_INFO_1_EX) GetProcAddress("GetWin9XUserInfo1Ex"); m_pfnGetWin9XUserInfo2Ex = (PFN_CIM32NET_GET_WIN_9_X_USER_INFO_2_EX) GetProcAddress("GetWin9XUserInfo2Ex"); m_pfnGetWin9XConfigManagerStatus = (PFN_CIM32NET_GET_WIN_9_X_CONFIG_MANAGER_STATUS) GetProcAddress("GetWin9XConfigManagerStatus"); m_pfnGetWin9XFreeSpace = (PFN_CIM32NET_GET_WIN_9_X_FREE_SPACE) GetProcAddress("GetWin9XFreeSpace"); m_pfnCIM32THK_CM_Locate_DevNode = (PFN_CIM32NET_CM_LOCATE_DEVNODE) GetProcAddress( "CIM32THK_CM_Locate_DevNode" ); m_pfnCIM32THK_CM_Get_Child = (PFN_CIM32NET_CM_GET_CHILD) GetProcAddress("CIM32THK_CM_Get_Child" ); m_pfnCIM32THK_CM_Get_Sibling = (PFN_CIM32NET_CM_GET_SIBLING) GetProcAddress("CIM32THK_CM_Get_Sibling" ); m_pfnCIM32THK_CM_Read_Registry_Value = (PFN_CIM32NET_CM_READ_REGISTRY_VALUE) GetProcAddress("CIM32THK_CM_Read_Registry_Value" ); m_pfnCIM32THK_CM_Get_DevNode_Status = (PFN_CIM32NET_CM_GET_DEVNODE_STATUS) GetProcAddress("CIM32THK_CM_Get_DevNode_Status" ); m_pfnCIM32THK_CM_Get_Device_ID = (PFN_CIM32NET_CM_GET_DEVICE_ID) GetProcAddress("CIM32THK_CM_Get_Device_ID" ); m_pfnCIM32THK_CM_Get_Device_ID_Size = (PFN_CIM32NET_CM_GET_DEVICE_ID_SIZE) GetProcAddress("CIM32THK_CM_Get_Device_ID_Size" ); m_pfnCIM32THK_CM_Get_First_Log_Conf = (PFN_CIM32NET_CM_GET_FIRST_LOG_CONF) GetProcAddress("CIM32THK_CM_Get_First_Log_Conf" ); m_pfnCIM32THK_CM_Get_Next_Res_Des = (PFN_CIM32NET_CM_GET_NEXT_RES_DES) GetProcAddress("CIM32THK_CM_Get_Next_Res_Des" ); m_pfnCIM32THK_CM_Get_Res_Des_Data_Size = (PFN_CIM32NET_CM_GET_RES_DES_DATA_SIZE) GetProcAddress("CIM32THK_CM_Get_Res_Des_Data_Size" ); m_pfnCIM32THK_CM_Get_Res_Des_Data = (PFN_CIM32NET_CM_GET_RES_DES_DATA) GetProcAddress("CIM32THK_CM_Get_Res_Des_Data" ); m_pfnCIM32THK_CM_Get_Bus_Info = (PFN_CIM32NET_CM_GET_BUS_INFO) GetProcAddress("CIM32THK_CM_Get_Bus_Info" ); m_pfnCIM32THK_CM_Get_Parent = (PFN_CIM32NET_CM_GET_PARENT) GetProcAddress("CIM32THK_CM_Get_Parent" ); m_pfnCIM32THK_CM_Query_Arbitrator_Free_Data = (PFN_CIM32NET_CM_QUERY_ARBITRATOR_FREE_DATA) GetProcAddress("CIM32THK_CM_Query_Arbitrator_Free_Data" ); m_pfnCIM32THK_CM_Delete_Range = (PFN_CIM32NET_CM_DELETE_RANGE) GetProcAddress("CIM32THK_CM_Delete_Range" ); m_pfnCIM32THK_CM_First_Range = (PFN_CIM32NET_CM_FIRST_RANGE) GetProcAddress("CIM32THK_CM_First_Range" ); m_pfnCIM32THK_CM_Next_Range = (PFN_CIM32NET_CM_NEXT_RANGE) GetProcAddress("CIM32THK_CM_Next_Range" ); m_pfnCIM32THK_CM_Free_Range_List = (PFN_CIM32NET_CM_FREE_RANGE_LIST) GetProcAddress("CIM32THK_CM_Free_Range_List" ); // Check that we have function pointers to functions that should be // present in all versions of this dll... if(m_pfnGetWin9XBiosUnit == NULL || m_pfnGetWin9XPartitionTable == NULL || m_pfnGetWin9XDriveParams == NULL || m_pfnGetWin9XUseInfo1 == NULL || m_pfnGetWin9XNetUseEnum == NULL || m_pfnGetWin9XUserInfo1 == NULL || m_pfnGetWin9XUserInfo2 == NULL || m_pfnGetWin9XUserInfo1Ex == NULL || m_pfnGetWin9XUserInfo2Ex == NULL || m_pfnGetWin9XConfigManagerStatus == NULL || m_pfnGetWin9XFreeSpace == NULL || m_pfnCIM32THK_CM_Locate_DevNode == NULL || m_pfnCIM32THK_CM_Get_Child == NULL || m_pfnCIM32THK_CM_Get_Sibling == NULL || m_pfnCIM32THK_CM_Read_Registry_Value == NULL || m_pfnCIM32THK_CM_Get_DevNode_Status == NULL || m_pfnCIM32THK_CM_Get_Device_ID == NULL || m_pfnCIM32THK_CM_Get_Device_ID_Size == NULL || m_pfnCIM32THK_CM_Get_First_Log_Conf == NULL || m_pfnCIM32THK_CM_Get_Next_Res_Des == NULL || m_pfnCIM32THK_CM_Get_Res_Des_Data_Size == NULL || m_pfnCIM32THK_CM_Get_Res_Des_Data == NULL || m_pfnCIM32THK_CM_Get_Bus_Info == NULL || m_pfnCIM32THK_CM_Get_Parent == NULL) { fRet = false; } } return fRet; } /****************************************************************************** * Member functions wrapping Cim32Net api functions. Add new functions here * as required. *****************************************************************************/ WORD CCim32NetApi::GetWin9XBiosUnit ( LPSTR a_lpDeviceID ) { return m_pfnGetWin9XBiosUnit(a_lpDeviceID); } BYTE CCim32NetApi::GetWin9XPartitionTable ( BYTE a_cDrive, pMasterBootSector a_pMBR ) { return m_pfnGetWin9XPartitionTable(a_cDrive, a_pMBR); } BYTE CCim32NetApi::GetWin9XDriveParams ( BYTE a_cDrive, pInt13DriveParams a_pParams ) { return m_pfnGetWin9XDriveParams(a_cDrive, a_pParams); } ULONG CCim32NetApi::GetWin9XUseInfo1 ( LPSTR Name, LPSTR Local, LPSTR Remote, LPSTR Password, LPULONG pdwStatus, LPULONG pdwType, LPULONG pdwRefCount, LPULONG pdwUseCount ) { return m_pfnGetWin9XUseInfo1(Name, Local, Remote, Password, pdwStatus, pdwType, pdwRefCount, pdwUseCount ); } // pbBuffer is used internally as a work buffer. It should be allocated and // freed by the caller, and should be the same length as pBuffer2, which // is a pointer to an array of use_info_1Out structures. ULONG CCim32NetApi::GetWin9XNetUseEnum( LPCSTR pszServer, short sLevel, LPSTR pbBuffer, use_info_1Out *pBuffer2, unsigned short cbBuffer, unsigned short far *pcEntriesRead, unsigned short far *pcTotalAvail ) { return m_pfnGetWin9XNetUseEnum( pszServer, sLevel, pbBuffer, pBuffer2, cbBuffer, pcEntriesRead, pcTotalAvail); } ULONG CCim32NetApi::GetWin9XUserInfo1 ( LPSTR Name, LPSTR HomeDirectory, LPSTR Comment, LPSTR ScriptPath, LPULONG PasswordAge, LPUSHORT Privileges, LPUSHORT Flags ) { return m_pfnGetWin9XUserInfo1(Name, HomeDirectory, Comment, ScriptPath, PasswordAge, Privileges, Flags); } ULONG CCim32NetApi::GetWin9XUserInfo2 ( LPSTR Name, LPSTR FullName, LPSTR UserComment, LPSTR Parameters, LPSTR Workstations, LPSTR LogonServer, LPLOGONDETAILS LogonDetails ) { return m_pfnGetWin9XUserInfo2(Name, FullName, UserComment, Parameters, Workstations, LogonServer, LogonDetails); } ULONG CCim32NetApi::GetWin9XUserInfo1Ex ( LPSTR DomainName, LPSTR Name, DWORD fGetDC, LPSTR HomeDirectory, LPSTR Comment, LPSTR ScriptPath, LPULONG PasswordAge, LPUSHORT Privileges, LPUSHORT Flags ) { return m_pfnGetWin9XUserInfo1Ex(DomainName, Name, fGetDC, HomeDirectory, Comment, ScriptPath, PasswordAge, Privileges, Flags); } ULONG CCim32NetApi::GetWin9XUserInfo2Ex ( LPSTR DomainName, LPSTR Name, DWORD fGetDC, LPSTR FullName, LPSTR UserComment, LPSTR Parameters, LPSTR Workstations, LPSTR LogonServer, LPLOGONDETAILS LogonDetails ) { return m_pfnGetWin9XUserInfo2Ex(DomainName, Name, fGetDC, FullName, UserComment, Parameters, Workstations, LogonServer, LogonDetails); } ULONG CCim32NetApi::GetWin9XConfigManagerStatus ( LPSTR a_HardwareKey ) { return m_pfnGetWin9XConfigManagerStatus(a_HardwareKey); } DWORD CCim32NetApi::GetWin9XGetFreeSpace ( DWORD dwOption ) { return m_pfnGetWin9XFreeSpace ( dwOption ) ; } DWORD CCim32NetApi::CIM32THK_CM_Locate_DevNode ( PDEVNODE pdn, LPSTR HardwareKey, ULONG ulFlags ) { return m_pfnCIM32THK_CM_Locate_DevNode(pdn, HardwareKey, ulFlags); } DWORD CCim32NetApi::CIM32THK_CM_Get_Child ( PDEVNODE pdn, DEVNODE dnParent, ULONG ulFlags ) { return m_pfnCIM32THK_CM_Get_Child(pdn, dnParent, ulFlags); } DWORD CCim32NetApi::CIM32THK_CM_Get_Sibling ( PDEVNODE pdn, DEVNODE dnParent, ULONG ulFlags ) { return m_pfnCIM32THK_CM_Get_Sibling(pdn, dnParent, ulFlags); } DWORD CCim32NetApi::CIM32THK_CM_Read_Registry_Value ( DEVNODE dnDevNode, LPSTR pszSubKey, LPCSTR pszValueName, ULONG ulExpectedType, LPVOID Buffer, LPULONG pulLength, ULONG ulFlags ) { return m_pfnCIM32THK_CM_Read_Registry_Value(dnDevNode, pszSubKey, pszValueName, ulExpectedType, Buffer, pulLength, ulFlags ); } DWORD CCim32NetApi::CIM32THK_CM_Get_DevNode_Status ( LPULONG pulStatus, LPULONG pulProblemNumber, DEVNODE dnDevNode, ULONG ulFlags ) { return m_pfnCIM32THK_CM_Get_DevNode_Status(pulStatus, pulProblemNumber, dnDevNode, ulFlags); } DWORD CCim32NetApi::CIM32THK_CM_Get_Device_ID ( DEVNODE dnDevNode, LPVOID Buffer, ULONG BufferLen, ULONG ulFlags ) { return m_pfnCIM32THK_CM_Get_Device_ID(dnDevNode, Buffer, BufferLen, ulFlags); } DWORD CCim32NetApi::CIM32THK_CM_Get_Device_ID_Size ( LPULONG pulLen, DEVNODE dnDevNode, ULONG ulFlags ) { return m_pfnCIM32THK_CM_Get_Device_ID_Size(pulLen, dnDevNode, ulFlags); } DWORD CCim32NetApi::CIM32THK_CM_Get_First_Log_Conf ( PLOG_CONF plcLogConf, DEVNODE dnDevNode, ULONG ulFlags ) { return m_pfnCIM32THK_CM_Get_First_Log_Conf(plcLogConf, dnDevNode, ulFlags ); } DWORD CCim32NetApi::CIM32THK_CM_Get_Next_Res_Des ( PRES_DES prdResDes, RES_DES rdResDes, RESOURCEID ForResource, PRESOURCEID pResourceID, ULONG ulFlags ) { return m_pfnCIM32THK_CM_Get_Next_Res_Des(prdResDes, rdResDes, ForResource, pResourceID, ulFlags); } DWORD CCim32NetApi::CIM32THK_CM_Get_Res_Des_Data_Size ( LPULONG pulSize, RES_DES rdResDes, ULONG ulFlags ) { return m_pfnCIM32THK_CM_Get_Res_Des_Data_Size(pulSize, rdResDes, ulFlags); } DWORD CCim32NetApi::CIM32THK_CM_Get_Res_Des_Data ( RES_DES rdResDes, LPVOID Buffer, ULONG BufferLen, ULONG ulFlags ) { return m_pfnCIM32THK_CM_Get_Res_Des_Data(rdResDes, Buffer, BufferLen, ulFlags); } DWORD CCim32NetApi::CIM32THK_CM_Get_Bus_Info ( DEVNODE dnDevNode, PCMBUSTYPE pbtBusType, LPULONG pulSizeOfInfo, LPVOID pInfo, ULONG ulFlags ) { return m_pfnCIM32THK_CM_Get_Bus_Info(dnDevNode, pbtBusType, pulSizeOfInfo, pInfo, ulFlags); } DWORD CCim32NetApi::CIM32THK_CM_Get_Parent ( PDEVNODE pdn, DEVNODE dnChild, ULONG ulFlags ) { return m_pfnCIM32THK_CM_Get_Parent(pdn, dnChild, ulFlags); } DWORD CCim32NetApi::CIM32THK_CM_Query_Arbitrator_Free_Data ( PVOID pData, ULONG DataLen, DEVNODE dnDevInst, RESOURCEID ResourceID, ULONG ulFlags ) { return m_pfnCIM32THK_CM_Query_Arbitrator_Free_Data( pData, DataLen, dnDevInst, ResourceID, ulFlags); } DWORD CCim32NetApi::CIM32THK_CM_Delete_Range ( ULONG ulStartValue, ULONG ulEndValue, RANGE_LIST rlh, ULONG ulFlags ) { return m_pfnCIM32THK_CM_Delete_Range( ulStartValue, ulEndValue, rlh, ulFlags); } DWORD CCim32NetApi::CIM32THK_CM_First_Range ( RANGE_LIST rlh, LPULONG pulStart, LPULONG pulEnd, PRANGE_ELEMENT preElement, ULONG ulFlags ) { return m_pfnCIM32THK_CM_First_Range( rlh, pulStart, pulEnd, preElement, ulFlags); } DWORD CCim32NetApi::CIM32THK_CM_Next_Range ( PRANGE_ELEMENT preElement, LPULONG pulStart, LPULONG pullEnd, ULONG ulFlags ) { return m_pfnCIM32THK_CM_Next_Range( preElement, pulStart, pullEnd, ulFlags); } DWORD CCim32NetApi::CIM32THK_CM_Free_Range_List ( RANGE_LIST rlh, ULONG ulFlags ) { return m_pfnCIM32THK_CM_Free_Range_List( rlh, ulFlags); } #endif