msxfs.dll函数加载代码
#include "stdafx.h" #include "WSXFSLoader.h" NS_AWP_DEVICE_WOSA_BEGIN WSXFSLoader::WSXFSLoader() { hDllLib = LoadLibrary(_T("msxfs.dll")); if (hDllLib == nullptr) return; WCHAR lpDllPath[MAX_PATH]; GetModuleFileName(hDllLib, lpDllPath, sizeof(lpDllPath)); // 获取进程文件路径 HINSTANCE hModule = GetModuleHandle(NULL); WCHAR lpszPath[MAX_PATH]; DWORD dwPathLength = GetModuleFileName(hModule, lpszPath, sizeof(lpszPath)); //截取目录 *(wcsrchr(lpszPath, '\') + 1) = 0; wcscat_s(lpszPath, _T("Temp\")); //WFM m_fpWFMAllocateBuffer = (WFMAllocateBufferProc)GetProcAddress(hDllLib, "WFMAllocateBuffer"); m_fpWFMAllocateMore = (WFMAllocateMoreProc)GetProcAddress(hDllLib, "WFMAllocateMore"); m_fpWFMFreeBuffer = (WFMFreeBufferProc)GetProcAddress(hDllLib, "WFMFreeBuffer"); m_fpWFMGetTraceLevel = (WFMGetTraceLevelProc)GetProcAddress(hDllLib, "WFMGetTraceLevel"); m_fpWFMKillTimer = (WFMKillTimerProc)GetProcAddress(hDllLib, "WFMKillTimer"); m_fpWFMOutputTraceData = (WFMOutputTraceDataProc)GetProcAddress(hDllLib, "WFMOutputTraceData"); m_fpWFMReleaseDLL = (WFMReleaseDLLProc)GetProcAddress(hDllLib, "WFMReleaseDLL"); m_fpWFMSetTimer = (WFMSetTimerProc)GetProcAddress(hDllLib, "WFMSetTimer"); m_fpWFMSetTraceLevel = (WFMSetTraceLevelProc)GetProcAddress(hDllLib, "WFMSetTraceLevel"); //WFS m_fpWFSAsyncClose = (WFSAsyncCloseProc)GetProcAddress(hDllLib, "WFSAsyncClose"); m_fpWFSAsyncDeregister = (WFSAsyncDeregisterProc)GetProcAddress(hDllLib, "WFSAsyncDeregister"); m_fpWFSAsyncExecute = (WFSAsyncExecuteProc)GetProcAddress(hDllLib, "WFSAsyncExecute"); m_fpWFSAsyncGetInfo = (WFSAsyncGetInfoProc)GetProcAddress(hDllLib, "WFSAsyncGetInfo"); m_fpWFSAsyncLock = (WFSAsyncLockProc)GetProcAddress(hDllLib, "WFSAsyncLock"); m_fpWFSAsyncOpen = (WFSAsyncOpenProc)GetProcAddress(hDllLib, "WFSAsyncOpen"); m_fpWFSAsyncRegister = (WFSAsyncRegisterProc)GetProcAddress(hDllLib, "WFSAsyncRegister"); m_fpWFSAsyncUnlock = (WFSAsyncUnlockProc)GetProcAddress(hDllLib, "WFSAsyncUnlock"); m_fpWFSCancelAsyncRequest = (WFSCancelAsyncRequestProc)GetProcAddress(hDllLib, "WFSCancelAsyncRequest"); m_fpWFSCancelBlockingCall = (WFSCancelBlockingCallProc)GetProcAddress(hDllLib, "WFSCancelBlockingCall"); m_fpWFSCleanUp = (WFSCleanUpProc)GetProcAddress(hDllLib, "WFSCleanUp"); m_fpWFSClose = (WFSCloseProc)GetProcAddress(hDllLib, "WFSClose"); m_fpWFSDeregister = (WFSDeregisterProc)GetProcAddress(hDllLib, "WFSDeregister"); m_fpWFSDestroyAppHandle = (WFSDestroyAppHandleProc)GetProcAddress(hDllLib, "WFSDestroyAppHandle"); m_fpWFSFreeResult = (WFSFreeResultProc)GetProcAddress(hDllLib, "WFSFreeResult"); m_fpWFSGetInfo = (WFSGetInfoProc)GetProcAddress(hDllLib, "WFSGetInfo"); m_fpWFSIsBlocking = (WFSIsBlockingProc)GetProcAddress(hDllLib, "WFSIsBlocking"); m_fpWFSLock = (WFSLockProc)GetProcAddress(hDllLib, "WFSLock"); m_fpWFSOpen = (WFSOpenProc)GetProcAddress(hDllLib, "WFSOpen"); m_fpWFSRegister = (WFSRegisterProc)GetProcAddress(hDllLib, "WFSRegister"); m_fpWFSSetBlockingHook = (WFSSetBlockingHookProc)GetProcAddress(hDllLib, "WFSSetBlockingHook"); m_fpWFSStartUp = (WFSStartUpProc)GetProcAddress(hDllLib, "WFSStartUp"); m_fpWFSUnhookBlockingHook = (WFSUnhookBlockingHookProc)GetProcAddress(hDllLib, "WFSUnhookBlockingHook"); m_fpWFSUnlock = (WFSUnlockProc)GetProcAddress(hDllLib, "WFSUnlock"); //DWORD dwVersion = (*fpWFSStartUp)(); //DWORD dwWindowsMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion))); //DWORD dwWindowsMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion))); //const int nBufSize = 512; //TCHAR chBuf[nBufSize]; //ZeroMemory(chBuf, nBufSize); //OutputDebugString(chBuf); //FreeLibrary(hDllLib); LPWFSVERSION lpVersion = nullptr; auto result = WFMAllocateBuffer(sizeof(WFSVERSION), ulMemFlags, (void**)&lpVersion); DWORD dwVersion = 0x00031403; auto startupResult = this->WFSStartUp(dwVersion, lpVersion); } WSXFSLoader::~WSXFSLoader() { if (hDllLib != nullptr) { FreeLibrary(hDllLib); } } HRESULT WSXFSLoader::WFMAllocateBuffer(ULONG ulSize, ULONG ulFlags, LPVOID * lppvData) { return (*m_fpWFMAllocateBuffer)(ulSize, ulFlags, lppvData); } HRESULT WSXFSLoader::WFMAllocateMore(ULONG ulSize, LPVOID lpvOriginal, LPVOID * lppvData) { return (*m_fpWFMAllocateMore)(ulSize, lpvOriginal, lppvData); } HRESULT WSXFSLoader::WFMFreeBuffer(LPVOID lpvData) { return (*m_fpWFMFreeBuffer)(lpvData); } HRESULT WSXFSLoader::WFMGetTraceLevel(HSERVICE hService, LPDWORD lpdwTraceLevel) { return (*m_fpWFMGetTraceLevel)(hService, lpdwTraceLevel); } HRESULT WSXFSLoader::WFMKillTimer(WORD wTimerID) { return (*m_fpWFMKillTimer)(wTimerID); } HRESULT WSXFSLoader::WFMOutputTraceData(LPSTR lpszData) { return (*m_fpWFMOutputTraceData)(lpszData); } HRESULT WSXFSLoader::WFMReleaseDLL(HPROVIDER hProvider) { return (*m_fpWFMReleaseDLL)(hProvider); } HRESULT WSXFSLoader::WFMSetTimer(HWND hWnd, LPVOID lpContext, DWORD dwTimeVal, LPWORD lpwTimerID) { return (*m_fpWFMSetTimer)(hWnd, lpContext, dwTimeVal, lpwTimerID); } HRESULT WSXFSLoader::WFMSetTraceLevel(HSERVICE hService, DWORD dwTraceLevel) { return (*m_fpWFMSetTraceLevel)(hService, dwTraceLevel); } HRESULT WSXFSLoader::WFSAsyncClose(HSERVICE hService, HWND hWnd, LPREQUESTID lpRequestID) { return (*m_fpWFSAsyncClose)(hService, hWnd, lpRequestID); } HRESULT WSXFSLoader::WFSAsyncDeregister(HSERVICE hService, DWORD dwEventClass, HWND hWndReg, HWND hWnd, LPREQUESTID lpRequestID) { return (*m_fpWFSAsyncDeregister)(hService, dwEventClass, hWndReg, hWnd, lpRequestID); } HRESULT WSXFSLoader::WFSAsyncExecute(HSERVICE hService, DWORD dwCommand, LPVOID lpCmdData, DWORD dwTimeOut, HWND hWnd, LPREQUESTID lpRequestID) { return (*m_fpWFSAsyncExecute)(hService, dwCommand, lpCmdData, dwTimeOut, hWnd, lpRequestID); } HRESULT WSXFSLoader::WFSAsyncGetInfo(HSERVICE hService, DWORD dwCategory, LPVOID lpQueryDetails, DWORD dwTimeOut, HWND hWnd, LPREQUESTID lpRequestID) { return (*m_fpWFSAsyncGetInfo)(hService, dwCategory, lpQueryDetails, dwTimeOut, hWnd, lpRequestID); } HRESULT WSXFSLoader::WFSAsyncLock(HSERVICE hService, DWORD dwTimeOut, HWND hWnd, LPREQUESTID lpRequestID) { return (*m_fpWFSAsyncLock)(hService, dwTimeOut, hWnd, lpRequestID); } HRESULT WSXFSLoader::WFSAsyncOpen(LPSTR lpszLogicalName, HAPP hApp, LPSTR lpszAppID, DWORD dwTraceLevel, DWORD dwTimeOut, LPHSERVICE lphService, HWND hWnd, DWORD dwSrvcVersionsRequired, LPWFSVERSION lpSrvcVersion, LPWFSVERSION lpSPIVersion, LPREQUESTID lpRequestID) { return (*m_fpWFSAsyncOpen)(lpszLogicalName, hApp, lpszAppID, dwTraceLevel, dwTimeOut, lphService, hWnd, dwSrvcVersionsRequired, lpSrvcVersion, lpSPIVersion, lpRequestID); } HRESULT WSXFSLoader::WFSAsyncRegister(HSERVICE hService, DWORD dwEventClass, HWND hWndReg, HWND hWnd, LPREQUESTID lpRequestID) { return (*m_fpWFSAsyncRegister)(hService, dwEventClass, hWndReg, hWnd, lpRequestID); } HRESULT WSXFSLoader::WFSAsyncUnlock(HSERVICE hService, HWND hWnd, LPREQUESTID lpRequestID) { return (*m_fpWFSAsyncUnlock)(hService, hWnd, lpRequestID); } HRESULT WSXFSLoader::WFSCancelAsyncRequest(HSERVICE hService, REQUESTID lpRequestID) { return (*m_fpWFSCancelAsyncRequest)(hService, lpRequestID); } HRESULT WSXFSLoader::WFSCancelBlockingCall(DWORD dwThreadID) { return (*m_fpWFSCancelBlockingCall)(dwThreadID); } HRESULT WSXFSLoader::WFSCleanUp() { return (*m_fpWFSCleanUp)(); } HRESULT WSXFSLoader::WFSClose(HSERVICE hService) { return (*m_fpWFSClose)(hService); } HRESULT WSXFSLoader::WFSDeregister(HSERVICE hService, DWORD dwEventClass, HWND hWndReg) { return (*m_fpWFSDeregister)(hService, dwEventClass, hWndReg); } HRESULT WSXFSLoader::WFSDestroyAppHandle(HAPP hApp) { return (*m_fpWFSDestroyAppHandle)(hApp); } HRESULT WSXFSLoader::WFSExecute(HSERVICE hService, DWORD dwCommand, LPVOID lpCmdData, DWORD dwTimeOut, LPWFSRESULT * lppResult) { return (*m_fpWFSExecute)(hService, dwCommand, lpCmdData, dwTimeOut, lppResult); } HRESULT WSXFSLoader::WFSFreeResult(LPWFSRESULT lpResult) { return (*m_fpWFSFreeResult)(lpResult); } HRESULT WSXFSLoader::WFSGetInfo(HSERVICE hService, DWORD dwCategory, LPVOID lpQueryDetails, DWORD dwTimeOut, LPWFSRESULT * lppResult) { return (*m_fpWFSGetInfo)(hService, dwCategory, lpQueryDetails, dwTimeOut, lppResult); } HRESULT WSXFSLoader::WFSIsBlocking() { return (*m_fpWFSIsBlocking)(); } HRESULT WSXFSLoader::WFSLock(HSERVICE hService, DWORD dwTimeOut, LPWFSRESULT * lppResult) { return (*m_fpWFSLock)(hService, dwTimeOut, lppResult); } HRESULT WSXFSLoader::WFSOpen(LPSTR lpszLogicalName, HAPP hApp, LPSTR lpszAppID, DWORD dwTraceLevel, DWORD dwTimeOut, DWORD dwSrvcVersionsRequired, LPWFSVERSION lpSrvcVersion, LPWFSVERSION lpSPIVersion, LPHSERVICE lphService) { return (*m_fpWFSOpen)(lpszLogicalName, hApp, lpszAppID, dwTraceLevel, dwTimeOut, dwSrvcVersionsRequired, lpSrvcVersion, lpSPIVersion, lphService); } HRESULT WSXFSLoader::WFSRegister(HSERVICE hService, DWORD dwEventClass, HWND hWndReg) { return (*m_fpWFSRegister)(hService, dwEventClass, hWndReg); } HRESULT WSXFSLoader::WFSSetBlockingHook(XFSBLOCKINGHOOK lpBlockFunc, LPXFSBLOCKINGHOOK lppPrevFunc) { return (*m_fpWFSSetBlockingHook)(lpBlockFunc, lppPrevFunc); } HRESULT WSXFSLoader::WFSStartUp(DWORD dwVersionsRequired, LPWFSVERSION lpWFSVersion) { return (*m_fpWFSStartUp)(dwVersionsRequired, lpWFSVersion); } HRESULT WSXFSLoader::WFSUnhookBlockingHook() { return (*m_fpWFSUnhookBlockingHook)(); } HRESULT WSXFSLoader::WFSUnlock(HSERVICE hService) { return (*m_fpWFSUnlock)(hService); } NS_AWP_DEVICE_WOSA_END
头文件定义
#pragma once NS_AWP_DEVICE_WOSA_BEGIN //WFM typedef HRESULT(CALLBACK * WFMAllocateBufferProc)(ULONG, ULONG, LPVOID); typedef HRESULT(CALLBACK * WFMAllocateMoreProc)(ULONG ulSize, LPVOID lpvOriginal, LPVOID * lppvData); typedef HRESULT(CALLBACK * WFMFreeBufferProc)(LPVOID lpvData); typedef HRESULT(CALLBACK * WFMGetTraceLevelProc)(HSERVICE hService, LPDWORD lpdwTraceLevel); typedef HRESULT(CALLBACK * WFMKillTimerProc)(WORD wTimerID); typedef HRESULT(CALLBACK * WFMOutputTraceDataProc)(LPSTR lpszData); typedef HRESULT(CALLBACK * WFMReleaseDLLProc)(HPROVIDER hProvider); typedef HRESULT(CALLBACK * WFMSetTimerProc)(HWND hWnd, LPVOID lpContext, DWORD dwTimeVal, LPWORD lpwTimerID); typedef HRESULT(CALLBACK * WFMSetTraceLevelProc)(HSERVICE hService, DWORD dwTraceLevel); //WFS typedef HRESULT(CALLBACK * WFSAsyncCloseProc)(HSERVICE hService, HWND hWnd, LPREQUESTID lpRequestID); typedef HRESULT(CALLBACK * WFSAsyncDeregisterProc)(HSERVICE hService, DWORD dwEventClass, HWND hWndReg, HWND hWnd, LPREQUESTID lpRequestID); typedef HRESULT(CALLBACK * WFSAsyncExecuteProc)(HSERVICE hService, DWORD dwCommand, LPVOID lpCmdData, DWORD dwTimeOut, HWND hWnd, LPREQUESTID lpRequestID); typedef HRESULT(CALLBACK * WFSAsyncGetInfoProc)(HSERVICE hService, DWORD dwCategory, LPVOID lpQueryDetails, DWORD dwTimeOut, HWND hWnd, LPREQUESTID lpRequestID); typedef HRESULT(CALLBACK * WFSAsyncLockProc)(HSERVICE hService, DWORD dwTimeOut, HWND hWnd, LPREQUESTID lpRequestID); typedef HRESULT(CALLBACK * WFSAsyncOpenProc)(LPSTR lpszLogicalName, HAPP hApp, LPSTR lpszAppID, DWORD dwTraceLevel, DWORD dwTimeOut, LPHSERVICE lphService, HWND hWnd, DWORD dwSrvcVersionsRequired, LPWFSVERSION lpSrvcVersion, LPWFSVERSION lpSPIVersion, LPREQUESTID lpRequestID); typedef HRESULT(CALLBACK * WFSAsyncRegisterProc)(HSERVICE hService, DWORD dwEventClass, HWND hWndReg, HWND hWnd, LPREQUESTID lpRequestID); typedef HRESULT(CALLBACK * WFSAsyncUnlockProc)(HSERVICE hService, HWND hWnd, LPREQUESTID lpRequestID); typedef HRESULT(CALLBACK * WFSCancelAsyncRequestProc)(HSERVICE hService, REQUESTID RequestID); typedef HRESULT(CALLBACK * WFSCancelBlockingCallProc)(DWORD dwThreadID); typedef HRESULT(CALLBACK * WFSCleanUpProc)(); typedef HRESULT(CALLBACK * WFSCloseProc)(HSERVICE hService); typedef HRESULT(CALLBACK * WFSDeregisterProc)(HSERVICE hService, DWORD dwEventClass, HWND hWndReg); typedef HRESULT(CALLBACK * WFSDestroyAppHandleProc)(HAPP hApp); typedef HRESULT(CALLBACK * WFSExecuteProc)(HSERVICE hService, DWORD dwCommand, LPVOID lpCmdData, DWORD dwTimeOut, LPWFSRESULT * lppResult); typedef HRESULT(CALLBACK * WFSFreeResultProc)(LPWFSRESULT lpResult); typedef HRESULT(CALLBACK * WFSGetInfoProc)(HSERVICE hService, DWORD dwCategory, LPVOID lpQueryDetails, DWORD dwTimeOut, LPWFSRESULT * lppResult); typedef BOOL(CALLBACK * WFSIsBlockingProc)(); typedef HRESULT(CALLBACK * WFSLockProc)(HSERVICE hService, DWORD dwTimeOut, LPWFSRESULT * lppResult); typedef HRESULT(CALLBACK * WFSOpenProc)(LPSTR lpszLogicalName, HAPP hApp, LPSTR lpszAppID, DWORD dwTraceLevel, DWORD dwTimeOut, DWORD dwSrvcVersionsRequired, LPWFSVERSION lpSrvcVersion, LPWFSVERSION lpSPIVersion, LPHSERVICE lphService); typedef HRESULT(CALLBACK * WFSRegisterProc)(HSERVICE hService, DWORD dwEventClass, HWND hWndReg); typedef HRESULT(CALLBACK * WFSSetBlockingHookProc)(XFSBLOCKINGHOOK lpBlockFunc, LPXFSBLOCKINGHOOK lppPrevFunc); typedef HRESULT(CALLBACK * WFSStartUpProc)(DWORD dwVersionsRequired, LPWFSVERSION lpWFSVersion); typedef HRESULT(CALLBACK * WFSUnhookBlockingHookProc)(); typedef HRESULT(CALLBACK * WFSUnlockProc)(HSERVICE hService); public ref class WSXFSLoader { private: ULONG ulMemFlags = WFS_MEM_ZEROINIT | WFS_MEM_SHARE; HMODULE hDllLib; //WFM WFMAllocateBufferProc m_fpWFMAllocateBuffer; WFMAllocateMoreProc m_fpWFMAllocateMore; WFMFreeBufferProc m_fpWFMFreeBuffer; WFMGetTraceLevelProc m_fpWFMGetTraceLevel; WFMKillTimerProc m_fpWFMKillTimer; WFMOutputTraceDataProc m_fpWFMOutputTraceData; WFMReleaseDLLProc m_fpWFMReleaseDLL; WFMSetTimerProc m_fpWFMSetTimer; WFMSetTraceLevelProc m_fpWFMSetTraceLevel; //WFS WFSAsyncCloseProc m_fpWFSAsyncClose; WFSAsyncDeregisterProc m_fpWFSAsyncDeregister; WFSAsyncExecuteProc m_fpWFSAsyncExecute; WFSAsyncGetInfoProc m_fpWFSAsyncGetInfo; WFSAsyncLockProc m_fpWFSAsyncLock; WFSAsyncOpenProc m_fpWFSAsyncOpen; WFSAsyncRegisterProc m_fpWFSAsyncRegister; WFSAsyncUnlockProc m_fpWFSAsyncUnlock; WFSCancelAsyncRequestProc m_fpWFSCancelAsyncRequest; WFSCancelBlockingCallProc m_fpWFSCancelBlockingCall; WFSCleanUpProc m_fpWFSCleanUp; WFSCloseProc m_fpWFSClose; WFSDeregisterProc m_fpWFSDeregister; WFSDestroyAppHandleProc m_fpWFSDestroyAppHandle; WFSExecuteProc m_fpWFSExecute; WFSFreeResultProc m_fpWFSFreeResult; WFSGetInfoProc m_fpWFSGetInfo; WFSIsBlockingProc m_fpWFSIsBlocking; WFSLockProc m_fpWFSLock; WFSOpenProc m_fpWFSOpen; WFSRegisterProc m_fpWFSRegister; WFSSetBlockingHookProc m_fpWFSSetBlockingHook; WFSStartUpProc m_fpWFSStartUp; WFSUnhookBlockingHookProc m_fpWFSUnhookBlockingHook; WFSUnlockProc m_fpWFSUnlock; public: WSXFSLoader(); ~WSXFSLoader(); HRESULT WFMAllocateBuffer(ULONG ulSize, ULONG ulFlags, LPVOID * lppvData); HRESULT WFMAllocateMore(ULONG ulSize, LPVOID lpvOriginal, LPVOID * lppvData); HRESULT WFMFreeBuffer(LPVOID lpvData); HRESULT WFMGetTraceLevel(HSERVICE hService, LPDWORD lpdwTraceLevel); HRESULT WFMKillTimer(WORD wTimerID); HRESULT WFMOutputTraceData(LPSTR lpszData); HRESULT WFMReleaseDLL(HPROVIDER hProvider); HRESULT WFMSetTimer(HWND hWnd, LPVOID lpContext, DWORD dwTimeVal, LPWORD lpwTimerID); HRESULT WFMSetTraceLevel(HSERVICE hService, DWORD dwTraceLevel); HRESULT WFSAsyncClose(HSERVICE hService, HWND hWnd, LPREQUESTID lpRequestID); HRESULT WFSAsyncDeregister(HSERVICE hService, DWORD dwEventClass, HWND hWndReg, HWND hWnd, LPREQUESTID lpRequestID); HRESULT WFSAsyncExecute(HSERVICE hService, DWORD dwCommand, LPVOID lpCmdData, DWORD dwTimeOut, HWND hWnd, LPREQUESTID lpRequestID); HRESULT WFSAsyncGetInfo(HSERVICE hService, DWORD dwCategory, LPVOID lpQueryDetails, DWORD dwTimeOut, HWND hWnd, LPREQUESTID lpRequestID); HRESULT WFSAsyncLock(HSERVICE hService, DWORD dwTimeOut, HWND hWnd, LPREQUESTID lpRequestID); HRESULT WFSAsyncOpen(LPSTR lpszLogicalName, HAPP hApp, LPSTR lpszAppID, DWORD dwTraceLevel, DWORD dwTimeOut, LPHSERVICE lphService, HWND hWnd, DWORD dwSrvcVersionsRequired, LPWFSVERSION lpSrvcVersion, LPWFSVERSION lpSPIVersion, LPREQUESTID lpRequestID); HRESULT WFSAsyncRegister(HSERVICE hService, DWORD dwEventClass, HWND hWndReg, HWND hWnd, LPREQUESTID lpRequestID); HRESULT WFSAsyncUnlock(HSERVICE hService, HWND hWnd, LPREQUESTID lpRequestID); HRESULT WFSCancelAsyncRequest(HSERVICE hService, REQUESTID RequestID); HRESULT WFSCancelBlockingCall(DWORD dwThreadID); HRESULT WFSCleanUp(); HRESULT WFSClose(HSERVICE hService); HRESULT WFSDeregister(HSERVICE hService, DWORD dwEventClass, HWND hWndReg); HRESULT WFSDestroyAppHandle(HAPP hApp); HRESULT WFSExecute(HSERVICE hService, DWORD dwCommand, LPVOID lpCmdData, DWORD dwTimeOut, LPWFSRESULT * lppResult); HRESULT WFSFreeResult(LPWFSRESULT lpResult); HRESULT WFSGetInfo(HSERVICE hService, DWORD dwCategory, LPVOID lpQueryDetails, DWORD dwTimeOut, LPWFSRESULT * lppResult); HRESULT WFSIsBlocking(); HRESULT WFSLock(HSERVICE hService, DWORD dwTimeOut, LPWFSRESULT * lppResult); HRESULT WFSOpen(LPSTR lpszLogicalName, HAPP hApp, LPSTR lpszAppID, DWORD dwTraceLevel, DWORD dwTimeOut, DWORD dwSrvcVersionsRequired, LPWFSVERSION lpSrvcVersion, LPWFSVERSION lpSPIVersion, LPHSERVICE lphService); HRESULT WFSRegister(HSERVICE hService, DWORD dwEventClass, HWND hWndReg); HRESULT WFSSetBlockingHook(XFSBLOCKINGHOOK lpBlockFunc, LPXFSBLOCKINGHOOK lppPrevFunc); HRESULT WFSStartUp(DWORD dwVersionsRequired, LPWFSVERSION lpWFSVersion); HRESULT WFSUnhookBlockingHook(); HRESULT WFSUnlock(HSERVICE hService); }; NS_AWP_DEVICE_WOSA_END