32 #define DbgP(_x_) NFS41DbgPrint _x_ 36 #define TRACE_TAG L"[NFS41_NP]" 37 #define WNNC_DRIVER( major, minor ) ( major * 0x00010000 + minor ) 51 szbuffer[255] = (
TCHAR)0;
100 DbgP((
TEXT(
"OpenSharedMemory: OpenMutex failed\n")));
101 goto OpenSharedMemoryAbort1;
109 if (*phMemory ==
NULL)
112 DbgP((
TEXT(
"OpenSharedMemory: OpenFileMapping failed\n")));
113 goto OpenSharedMemoryAbort2;
120 DbgP((
TEXT(
"OpenSharedMemory: MapViewOfFile failed\n")));
121 goto OpenSharedMemoryAbort3;
126 OpenSharedMemoryAbort3:
129 OpenSharedMemoryAbort2:
134 OpenSharedMemoryAbort1:
206 DbgP((
TEXT(
"StoreConnectionInfo: NextIndex %d, NumResources %d\n"),
207 pSharedMemory->NextAvailableIndex,
208 pSharedMemory->NumberOfResourcesInUse));
212 if (!pSharedMemory->NetResources[
Index].InUse)
214 FreeEntryFound =
TRUE;
226 Index = pSharedMemory->NextAvailableIndex++;
230 pSharedMemory->NumberOfResourcesInUse += 1;
232 pNfs41NetResource = &pSharedMemory->NetResources[
Index];
235 pNfs41NetResource->
dwScope = lpNetResource->dwScope;
236 pNfs41NetResource->
dwType = lpNetResource->dwType;
237 pNfs41NetResource->
dwDisplayType = lpNetResource->dwDisplayType;
248 lpNetResource->lpRemoteName);
278 DbgP((
L"[aglo] calling CreateFile\n"));
288 DbgP((
L"[aglo] after CreateFile Device Handle\n"));
292 DbgP((
L"[aglo] calling DeviceIoControl\n"));
303 DbgP((
L"#### In except\n"));
305 DbgP((
L"[aglo] returned from DeviceIoControl %08lx\n", rc));
308 DbgP((
L"[aglo] SendTo_NFS41Driver: returning error from DeviceIoctl\n"));
313 DbgP((
L"[aglo] SendTo_NFS41Driver: The DeviceIoctl call succeded\n"));
320 DbgP((
L"[aglo] SendTo_NFS41Driver: error %08lx opening device \n",
Status));
322 DbgP((
L"[aglo] returned from SendTo_NFS41Driver %08lx\n",
Status));
333 DbgP((
L"[aglo] GetNetCaps %d\n", nIndex ));
386 *lpLogonScript =
NULL;
387 DbgP((
L"[aglo] NPLogonNotify: returning WN_SUCCESS\n" ));
401 DbgP((
L"[aglo] NPPasswordChangeNotify: WN_NOT_SUPPORTED\n" ));
434 WCHAR wszScratch[128];
443 DbgP((
L"[aglo] NPAddConnection3('%s', '%s')\n",
444 lpNetResource->lpLocalName, lpNetResource->lpRemoteName ));
445 DbgP((
L"[aglo] username = '%s', passwd = '%s'\n", lpUserName, lpPassword));
451 DbgP((
L"InitializeConnectionInfo failed with %d\n",
Status ));
458 if (
lstrlen(lpNetResource->lpLocalName) < 2 ||
459 lpNetResource->lpLocalName[1] !=
L':') {
464 LocalName[0] = (
WCHAR)
toupper(lpNetResource->lpLocalName[0]);
466 LocalName[2] =
L'\0';
472 if (lpNetResource->lpRemoteName[0] ==
L'\0' ||
473 lpNetResource->lpRemoteName[0] !=
L'\\' ||
474 lpNetResource->lpRemoteName[1] !=
L'\\') {
480 p = lpNetResource->lpRemoteName + 1;
481 ServerName[0] =
L'\\';
490 ServerName[
i] =
p[
i];
491 if (
p[
i] ==
L'\\')
break;
494 ServerName[
i] =
L'\0';
500 #ifdef CONVERT_2_UNIX_SLASHES 506 if(
q[
j] ==
L'\0')
break;
507 if (
q[
j] ==
L'\\')
q[
j] =
L'/';
517 if(
q[
j] ==
L'\0')
break;
518 if (
q[
j] ==
L'/')
q[
j] =
L'\\';
524 DbgP((
L"[aglo] Full Connect Name: %s\n", ConnectionName ));
525 DbgP((
L"[aglo] Full Connect Name Length: %d %d\n",
541 DbgP((
L"[aglo] SendTo_NFS41Driver failed with %d\n",
Status));
545 DbgP((
L"[aglo] calling DefineDosDevice\n"));
548 lpNetResource->lpLocalName,
551 DbgP((
L"[aglo] DefineDosDevice failed with %d\n",
Status));
560 DbgP((
L"[aglo] StoreConnectionInfo failed with %d\n",
Status));
566 DbgP((
L"[aglo] NPAddConnection3: status %08X\n",
Status));
587 DbgP((
TEXT(
"NPCancelConnection\n")));
592 (
PVOID)&pSharedMemory);
600 DbgP((
TEXT(
"NPCancelConnection: NextIndex %d, NumResources %d\n"),
601 pSharedMemory->NextAvailableIndex,
602 pSharedMemory->NumberOfResourcesInUse));
606 pNetResource = &pSharedMemory->NetResources[
Index];
608 if (pNetResource->
InUse)
616 DbgP((
TEXT(
"NPCancelConnection: Connection Found:\n")));
628 DbgP((
TEXT(
"NPCancelConnection: SendToMiniRdr returned Status %lx\n"),
Status));
642 pSharedMemory->NumberOfResourcesInUse--;
644 if (
Index+1 == pSharedMemory->NextAvailableIndex)
645 pSharedMemory->NextAvailableIndex--;
650 DbgP((
TEXT(
"NPCancelConnection: Name %S EntryName %S\n"),
653 DbgP((
TEXT(
"NPCancelConnection: Name Length %d Entry Name Length %d\n"),
656 DbgP((
TEXT(
"NPCancelConnection: Name Length %d Entry Name Length %d\n"),
665 (
PVOID)&pSharedMemory);
684 (
PVOID)&pSharedMemory);
694 pNetResource = &pSharedMemory->NetResources[
Index];
696 if (pNetResource->
InUse)
698 if ( ( (
wcslen(lpLocalName) + 1) *
sizeof(
WCHAR) ==
702 if (*lpBufferSize < pNetResource->RemoteNameLength)
736 DbgP((
L"[aglo] NPOpenEnum\n"));
765 DbgP((
L"[aglo] NPOpenEnum returning Status %lx\n",
Status));
780 ULONG SpaceNeeded = 0;
781 ULONG SpaceAvailable;
789 DbgP((
L"[aglo] NPEnumResource\n"));
791 DbgP((
L"[aglo] NPEnumResource Count Requested %d\n", *lpcCount));
794 SpaceAvailable = *lpBufferSize;
800 (
PVOID)&pSharedMemory);
805 for (
Index = *(
PULONG)hEnum; EntriesCopied < *lpcCount &&
806 Index < pSharedMemory->NextAvailableIndex;
Index++)
808 pNfsNetResource = &pSharedMemory->NetResources[
Index];
810 if (pNfsNetResource->
InUse)
815 SpaceNeeded += 5 *
sizeof(
WCHAR);
817 if ( SpaceNeeded > SpaceAvailable )
820 DbgP((
L"[aglo] NPEnumResource More Data Needed - %d\n", SpaceNeeded));
821 *lpBufferSize = SpaceNeeded;
826 SpaceAvailable -= SpaceNeeded;
835 StringZone = (
PWCHAR)( (
PBYTE) StringZone - SpaceNeeded );
850 *StringZone++ =
L'A';
851 *StringZone++ =
L'_';
852 *StringZone++ =
L'O';
853 *StringZone++ =
L'K';
854 *StringZone++ =
L'\0';
861 StringZone = (
PWCHAR)( (
PBYTE) StringZone - SpaceNeeded );
870 *lpcCount = EntriesCopied;
873 DbgP((
L"[aglo] NPEnumResource entries returned: %d\n", EntriesCopied));
882 DbgP((
L"[aglo] NPCloseEnum\n"));
893 DbgP((
L"[aglo] NPGetResourceParent: WN_NOT_SUPPORTED\n" ));
904 DbgP((
L"[aglo] NPGetResourceInformation: WN_NOT_SUPPORTED\n" ));
915 DbgP((
L"[aglo] NPGetUniversalName: WN_NOT_SUPPORTED\n" ));
DWORD APIENTRY NPGetResourceInformation(__in LPNETRESOURCE lpNetResource, __out_bcount(*lpBufferSize) LPVOID lpBuffer, __inout LPDWORD lpBufferSize, __deref_out LPWSTR *lplpSystem)
#define NFS41NP_MUTEX_NAME
#define WNNC_CON_ADDCONNECTION3
void FreeConnectionInfo(IN PCONNECTION_INFO Connection)
#define WN_NO_MORE_DEVICES
ULONG SendTo_NFS41Driver(IN ULONG IoctlCode, IN PVOID InputDataBuf, IN ULONG InputDataLen, IN PVOID OutputDataBuf, IN PULONG pOutputDataLen)
#define RESOURCEUSAGE_CONNECTABLE
_Inout_ PUSB_DEVICE_HANDLE DeviceHandle
#define WNNC_SPEC_VERSION
WCHAR ConnectionName[MAX_PATH]
#define DDD_REMOVE_DEFINITION
#define WNNC_CON_ADDCONNECTION
#define DDD_NO_BROADCAST_SYSTEM
void MarshalConnectionInfo(IN OUT PCONNECTION_INFO Connection)
DWORD APIENTRY NPPasswordChangeNotify(__in LPCWSTR lpAuthentInfoType, __in LPVOID lpAuthentInfo, __in LPCWSTR lpPreviousAuthentInfoType, __in LPVOID lpPreviousAuthentInfo, __in LPWSTR lpStationName, LPVOID StationHandle, DWORD dwChangeInfo)
#define IOCTL_NFS41_DELCONN
#define INVALID_HANDLE_VALUE
DWORD WINAPI GetLastError(VOID)
STRSAFEAPI StringCchVPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat, va_list argList)
DWORD InitializeConnectionInfo(IN OUT PCONNECTION_INFO Connection, IN PMOUNT_OPTION_BUFFER Options, OUT LPWSTR *ConnectionName)
int filter(unsigned int code)
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_ ULONG IoctlCode
#define OutputDebugString
DWORD APIENTRY NPOpenEnum(DWORD dwScope, DWORD dwType, DWORD dwUsage, LPNETRESOURCE lpNetResource, LPHANDLE lphEnum)
STRSAFEAPI StringCchCatW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
#define WN_ALREADY_CONNECTED
#define RESOURCE_CONNECTED
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
#define EXCEPTION_CONTINUE_SEARCH
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
static TAGREF LPCWSTR LPDWORD LPVOID lpBuffer
DWORD APIENTRY NPCancelConnection(__in LPWSTR lpName, __in BOOL fForce)
PCONNECTION_BUFFER Buffer
DWORD APIENTRY NPEnumResource(HANDLE hEnum, LPDWORD lpcCount, LPVOID lpBuffer, LPDWORD lpBufferSize)
#define NFS41_USER_DEVICE_NAME
NETRESOURCEA * LPNETRESOURCE
#define ERROR_FILE_NOT_FOUND
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
static DWORD StoreConnectionInfo(IN LPCWSTR LocalName, IN LPCWSTR ConnectionName, IN USHORT ConnectionNameLength, IN LPNETRESOURCE lpNetResource)
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
_In_ WDFCOLLECTION _In_ ULONG Index
#define NFS41_DEVICE_NAME
GLdouble GLdouble GLdouble GLdouble q
BOOL WINAPI DECLSPEC_HOTPATCH ReleaseMutex(IN HANDLE hMutex)
#define WNNC_NET_RDR2SAMPLE
DWORD APIENTRY NPGetResourceParent(LPNETRESOURCE lpNetResource, LPVOID lpBuffer, LPDWORD lpBufferSize)
DWORD APIENTRY NPGetUniversalName(LPCWSTR lpLocalPath, DWORD dwInfoLevel, LPVOID lpBuffer, LPDWORD lpBufferSize)
DWORD APIENTRY NPGetConnection(__in LPWSTR lpLocalName, __out_bcount(*lpBufferSize) LPWSTR lpRemoteName, __inout LPDWORD lpBufferSize)
VOID CloseSharedMemory(PHANDLE hMutex, PHANDLE hMemory, PVOID *pMemory)
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
#define IOCTL_NFS41_ADDCONN
#define NFS41_USER_SHARED_MEMORY_NAME
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
ULONG _cdecl NFS41DbgPrint(__in LPTSTR Format,...)
#define WNNC_CON_CANCELCONNECTION
BOOL WINAPI DeviceIoControl(IN HANDLE hDevice, IN DWORD dwIoControlCode, IN LPVOID lpInBuffer OPTIONAL, IN DWORD nInBufferSize OPTIONAL, OUT LPVOID lpOutBuffer OPTIONAL, IN DWORD nOutBufferSize OPTIONAL, OUT LPDWORD lpBytesReturned OPTIONAL, IN LPOVERLAPPED lpOverlapped OPTIONAL)
#define DDD_RAW_TARGET_PATH
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
IN OUT PVCB OUT PDIRENT OUT PBCB IN BOOLEAN CreateFile
#define WNNC_DRIVER_VERSION
DWORD APIENTRY NPAddConnection3(__in HWND hwndOwner, __in LPNETRESOURCE lpNetResource, __in_opt LPWSTR lpPassword, __in_opt LPWSTR lpUserName, __in DWORD dwFlags)
DWORD OpenSharedMemory(PHANDLE phMutex, PHANDLE phMemory, PVOID *pMemory)
USHORT ConnectionNameLength
#define WN_NO_MORE_ENTRIES
#define NFS41_PROVIDER_NAME_U
#define WNNC_DRIVER(major, minor)
#define _SEH2_EXCEPT(...)
#define _SEH2_GetExceptionCode()
DWORD APIENTRY NPAddConnection(__in LPNETRESOURCE lpNetResource, __in_opt LPWSTR lpPassword, __in_opt LPWSTR lpUserName)
WCHAR RemoteName[MAX_PATH]
STRSAFEAPI StringCbCopyW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
DWORD APIENTRY NPLogonNotify(__in PLUID lpLogonId, __in PCWSTR lpAuthentInfoType, __in PVOID lpAuthentInfo, __in PCWSTR lpPreviousAuthentInfoType, __in PVOID lpPreviousAuthentInfo, __in PWSTR lpStationName, __in PVOID StationHandle, __out PWSTR *lpLogonScript)
#define NFS41NP_MAX_DEVICES
static SERVICE_STATUS status
DWORD APIENTRY NPCloseEnum(HANDLE hEnum)
#define WNNC_SPEC_VERSION51
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define HeapFree(x, y, z)
#define DDD_EXACT_MATCH_ON_REMOVE
DWORD APIENTRY NPGetCaps(DWORD nIndex)
#define WNNC_CON_GETCONNECTIONS
WCHAR LocalName[MAX_PATH]