#ifndef UNICODE
#define UNICODE
#endif
#include <windows.h>
#include <stdio.h>
#include <lm.h>
#include <shlwapi.h>
#pragma comment(lib, "shlwapi.lib")
#pragma comment(lib, "Netapi32.lib")
#pragma comment(lib, "Advapi32.lib")
WCHAR *GetWstrFromAstr(LMSTR szSrc)
{
int i = 0;
int j = 0;
WCHAR *szDes = NULL;
printf("szSrc:%S\n", szSrc);
j = strlen( szSrc ) + 1;
i = MultiByteToWideChar
(
CP_ACP,
0,
szSrc,
j,
NULL,
0
);
if ( 0 == i )
{
return NULL;
}
szDes = ( WCHAR * ) new WCHAR[i];
if ( NULL == szDes )
{
return NULL;
}
RtlZeroMemory(szDes, sizeof((i)*sizeof(WCHAR)));
if ( 0 == MultiByteToWideChar
(
CP_ACP,
0,
szSrc,
j,
szDes,
i
) )
{
delete [] szDes;
szDes = NULL;
return NULL;
}
printf("WCHAR:%ws\n", szDes);
return szDes;
}
#define NET_SHARE_ENUM_TYPE 502
BOOL GetLocalPathFromSharedPath(TCHAR *szSrv, TCHAR *lpszShared, TCHAR *lpszLocal)
{
PSHARE_INFO_502 BufPtr,p;
NET_API_STATUS res;
LPTSTR lpszServer = NULL;
DWORD er=0,tr=0,resume=0, i;
if (lpszShared == NULL ||
lpszLocal == NULL)
{
return FALSE;
}
do
{
res = NetShareEnum (szSrv, NET_SHARE_ENUM_TYPE, (LPBYTE *) &BufPtr, MAX_PREFERRED_LENGTH, &er, &tr, &resume);
if(res == ERROR_SUCCESS || res == ERROR_MORE_DATA)
{
p=BufPtr;
for(i=1;i<=er;i++)
{
if (StrCmpI(lpszShared, (WCHAR *)(p->shi502_netname)) == 0)
{
StringCchCopy(lpszLocal, MAX_PATH, (WCHAR *)(p->shi502_path));
NetApiBufferFree(BufPtr);
return TRUE;
}
p++;
}
NetApiBufferFree(BufPtr);
}
}while (res==ERROR_MORE_DATA);
return FALSE;
}
BOOL GetLocalPathFromSharedPath(TCHAR *lpszShared, TCHAR *lpszLocal)
{
PSHARE_INFO_502 BufPtr,p;
NET_API_STATUS res;
LPTSTR lpszServer = NULL;
DWORD er=0,tr=0,resume=0, i;
do
{
res = NetShareEnum ((char*)NULL, 502, (LPBYTE *) &BufPtr, MAX_PREFERRED_LENGTH, &er, &tr, &resume);
if(res == ERROR_SUCCESS || res == ERROR_MORE_DATA)
{
p=BufPtr;
for(i=1;i<=er;i++)
{
printf("%-20S%-30S\n",p->shi502_netname, p->shi502_path);
if (wcscmp(lpszShared, (WCHAR *)(p->shi502_netname)) == 0)
{
wcscpy(lpszLocal, (WCHAR *)(p->shi502_path));
NetApiBufferFree(BufPtr);
return TRUE;
}
p++;
}
NetApiBufferFree(BufPtr);
}
}while (res==ERROR_MORE_DATA);
return FALSE;
}
void main()
{
WCHAR *szShared = L"\\\\127.0.0.1\\print$\\user\\ffffff\\desktop\\";
WCHAR szLocal[MAX_PATH] = {0};
WCHAR szShare[MAX_PATH] = {0};
WCHAR *p = szShared;
WCHAR *pStart = NULL;
WCHAR *pEnd = NULL;
DWORD cnt = 0;
while(*p != L'\0')
{
if (*p == L'\\')
{
cnt++;
if (cnt == 3)
{
pStart = p;
}
if (cnt == 4)
{
pEnd = p;
break;
}
}
p++;
}
if (pStart && pEnd)
{
StrCpyN(szShare, pStart+1, (static_cast<int>(pEnd-pStart)));
printf("szShare:%ws\n", szShare);
}
if (GetLocalPathFromSharedPath(szShare, szLocal))
{
PathAppend(szLocal, pEnd+1);
printf("Local:%ws\n", szLocal);
}
}