Version: 1
-Previous: 4c993ee8d13fb54d64ae59c635f7ea44d6acfcb0
-Head: 8179b146723b5a36975ead429906916c581036b5
+Previous: 50d9b53a40f46ab75009c2eae49f6c65f78df378
+Head: 60ee186f2566ca50649f490d940b13c9ad191490
Applied:
nd-heap: 4073d4bd9835679d69e79783b4fd841e173ec458
wv-reg: 2c86a99e122511e0ef8723c8ec08456f4002a39a
nd-prov: 8179b146723b5a36975ead429906916c581036b5
+ refresh-temp: 60ee186f2566ca50649f490d940b13c9ad191490
Unapplied:
srq: 0024a4123a3ed01d41c946126590641f9f76bc20
wv-rm-ioctl: 2c4f8b27f89993bc9c1215e8c358046b2934f755
--- /dev/null
+Bottom: 66b3bbf9279373fb53098afc77a8b097ec3e0281
+Top: cf7e3a0e63654fbee37b6aff6e747920198fd2bc
+Author: Sean Hefty <sean.hefty@intel.com>
+Date: 2010-07-26 15:27:54 -0700
+
+Refresh of nd-prov
+
+---
+
+diff --git a/trunk/ulp/netdirect2/user/nd_provider.cpp b/trunk/ulp/netdirect2/user/nd_provider.cpp
+index 92835fd..84da4dd 100644
+--- a/trunk/ulp/netdirect2/user/nd_provider.cpp
++++ b/trunk/ulp/netdirect2/user/nd_provider.cpp
+@@ -33,7 +33,26 @@
+ \r
+ CNDProvider::CNDProvider()\r
+ {\r
+- WvGetObject(IID_IWVProvider, (LPVOID *) &m_pWvProvider);\r
++ m_pWvProvider = NULL;\r
++}\r
++\r
++STDMETHODIMP CNDProvider::\r
++Init()\r
++{\r
++ HRESULT hr;\r
++\r
++ hr = WvGetObject(IID_IWVProvider, (LPVOID *) &m_pWvProvider);\r
++ if (FAILED(hr)) {\r
++ return hr;\r
++ }\r
++\r
++ if (!SetFileCompletionNotificationModes(m_pWvProvider->GetFileHandle(),\r
++ FILE_SKIP_COMPLETION_PORT_ON_SUCCESS |\r
++ FILE_SKIP_SET_EVENT_ON_HANDLE)) {\r
++ return HRESULT_FROM_WIN32(GetLastError());\r
++ }\r
++\r
++ return ND_SUCCESS;\r
+ }\r
+ \r
+ CNDProvider::~CNDProvider()\r
+diff --git a/trunk/ulp/netdirect2/user/nd_provider.h b/trunk/ulp/netdirect2/user/nd_provider.h
+index 15a74f6..504d5d1 100644
+--- a/trunk/ulp/netdirect2/user/nd_provider.h
++++ b/trunk/ulp/netdirect2/user/nd_provider.h
+@@ -53,11 +53,41 @@ public:
+ \r
+ CNDProvider();\r
+ ~CNDProvider();\r
++\r
+ void Delete() {delete this;}\r
++ static STDMETHODIMP\r
++ CreateInstance(CNDProvider **ppProvider)\r
++ {\r
++ HRESULT hr;\r
++ CNDProvider *provider;\r
++\r
++ provider = new CNDProvider(provider);\r
++ if (provider == NULL) {\r
++ hr = ND_NO_MEMORY;\r
++ goto err1;\r
++ }\r
++\r
++ hr = provider->Init();\r
++ if (FAILED(hr)) {\r
++ goto err2;\r
++ }\r
++\r
++ *ppProvider = provider;\r
++ return ND_SUCCESS;\r
++\r
++ err2:\r
++ provider->Release();\r
++ err1:\r
++ *ppProvider = NULL;\r
++ return hr;\r
++ }\r
+ \r
+ STDMETHODIMP QueryAdapterAddressList(SOCKET_ADDRESS_LIST* pAddressList,\r
+ SIZE_T* pcbAddressList, UINT64 adapterId);\r
+ IWVProvider *m_pWvProvider;\r
++\r
++private:\r
++ STDMETHODIMP Init();\r
+ };