mirror of
https://github.com/Xevion/easy7zip.git
synced 2025-12-12 05:09:59 -06:00
4.30 beta
This commit is contained in:
committed by
Kornel Lesiński
parent
bcd1db2f5a
commit
e18587ba51
242
Windows/Net.cpp
242
Windows/Net.cpp
@@ -4,6 +4,14 @@
|
||||
|
||||
#include "Windows/Net.h"
|
||||
|
||||
#ifndef _UNICODE
|
||||
#include "Common/StringConvert.h"
|
||||
#endif
|
||||
|
||||
#ifndef _UNICODE
|
||||
extern bool g_IsNT;
|
||||
#endif
|
||||
|
||||
namespace NWindows {
|
||||
namespace NNet {
|
||||
|
||||
@@ -15,8 +23,17 @@ DWORD CEnum::Open(DWORD scope, DWORD type, DWORD usage, LPNETRESOURCE netResourc
|
||||
return result;
|
||||
}
|
||||
|
||||
static void SetComplexString(bool &defined, CSysString &destString,
|
||||
LPCTSTR srsString)
|
||||
#ifndef _UNICODE
|
||||
DWORD CEnum::Open(DWORD scope, DWORD type, DWORD usage, LPNETRESOURCEW netResource)
|
||||
{
|
||||
Close();
|
||||
DWORD result = ::WNetOpenEnumW(scope, type, usage, netResource, &_handle);
|
||||
_handleAllocated = (result == NO_ERROR);
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
|
||||
static void SetComplexString(bool &defined, CSysString &destString, LPCTSTR srsString)
|
||||
{
|
||||
defined = (srsString != 0);
|
||||
if (defined)
|
||||
@@ -25,8 +42,7 @@ static void SetComplexString(bool &defined, CSysString &destString,
|
||||
destString.Empty();
|
||||
}
|
||||
|
||||
static void ConvertNETRESOURCEToCResource(const NETRESOURCE &netResource,
|
||||
CResource &resource)
|
||||
static void ConvertNETRESOURCEToCResource(const NETRESOURCE &netResource, CResource &resource)
|
||||
{
|
||||
resource.Scope = netResource.dwScope;
|
||||
resource.Type = netResource.dwType;
|
||||
@@ -38,8 +54,7 @@ static void ConvertNETRESOURCEToCResource(const NETRESOURCE &netResource,
|
||||
SetComplexString(resource.ProviderIsDefined, resource.Provider, netResource.lpProvider);
|
||||
}
|
||||
|
||||
static void SetComplexString2(LPTSTR *destString, bool defined,
|
||||
const CSysString &srcString)
|
||||
static void SetComplexString2(LPTSTR *destString, bool defined, const CSysString &srcString)
|
||||
{
|
||||
if (defined)
|
||||
*destString = (TCHAR *)(const TCHAR *)srcString;
|
||||
@@ -47,8 +62,7 @@ static void SetComplexString2(LPTSTR *destString, bool defined,
|
||||
*destString = 0;
|
||||
}
|
||||
|
||||
static void ConvertCResourceToNETRESOURCE(const CResource &resource,
|
||||
NETRESOURCE &netResource)
|
||||
static void ConvertCResourceToNETRESOURCE(const CResource &resource, NETRESOURCE &netResource)
|
||||
{
|
||||
netResource.dwScope = resource.Scope;
|
||||
netResource.dwType = resource.Type;
|
||||
@@ -60,8 +74,69 @@ static void ConvertCResourceToNETRESOURCE(const CResource &resource,
|
||||
SetComplexString2(&netResource.lpProvider, resource.ProviderIsDefined, resource.Provider);
|
||||
}
|
||||
|
||||
DWORD CEnum::Open(DWORD scope, DWORD type, DWORD usage,
|
||||
const CResource *resource)
|
||||
#ifndef _UNICODE
|
||||
|
||||
static void SetComplexString(bool &defined, UString &destString, LPCWSTR srsString)
|
||||
{
|
||||
defined = (srsString != 0);
|
||||
if (defined)
|
||||
destString = srsString;
|
||||
else
|
||||
destString.Empty();
|
||||
}
|
||||
|
||||
static void ConvertNETRESOURCEToCResource(const NETRESOURCEW &netResource, CResourceW &resource)
|
||||
{
|
||||
resource.Scope = netResource.dwScope;
|
||||
resource.Type = netResource.dwType;
|
||||
resource.DisplayType = netResource.dwDisplayType;
|
||||
resource.Usage = netResource.dwUsage;
|
||||
SetComplexString(resource.LocalNameIsDefined, resource.LocalName, netResource.lpLocalName);
|
||||
SetComplexString(resource.RemoteNameIsDefined, resource.RemoteName, netResource.lpRemoteName);
|
||||
SetComplexString(resource.CommentIsDefined, resource.Comment, netResource.lpComment);
|
||||
SetComplexString(resource.ProviderIsDefined, resource.Provider, netResource.lpProvider);
|
||||
}
|
||||
|
||||
static void SetComplexString2(LPWSTR *destString, bool defined, const UString &srcString)
|
||||
{
|
||||
if (defined)
|
||||
*destString = (WCHAR *)(const WCHAR *)srcString;
|
||||
else
|
||||
*destString = 0;
|
||||
}
|
||||
|
||||
static void ConvertCResourceToNETRESOURCE(const CResourceW &resource, NETRESOURCEW &netResource)
|
||||
{
|
||||
netResource.dwScope = resource.Scope;
|
||||
netResource.dwType = resource.Type;
|
||||
netResource.dwDisplayType = resource.DisplayType;
|
||||
netResource.dwUsage = resource.Usage;
|
||||
SetComplexString2(&netResource.lpLocalName, resource.LocalNameIsDefined, resource.LocalName);
|
||||
SetComplexString2(&netResource.lpRemoteName, resource.RemoteNameIsDefined, resource.RemoteName);
|
||||
SetComplexString2(&netResource.lpComment, resource.CommentIsDefined, resource.Comment);
|
||||
SetComplexString2(&netResource.lpProvider, resource.ProviderIsDefined, resource.Provider);
|
||||
}
|
||||
|
||||
static void ConvertResourceWToResource(const CResourceW &resourceW, CResource &resource)
|
||||
{
|
||||
*(CResourceBase *)&resource = *(CResourceBase *)&resourceW;
|
||||
resource.LocalName = GetSystemString(resourceW.LocalName);
|
||||
resource.RemoteName = GetSystemString(resourceW.RemoteName);
|
||||
resource.Comment = GetSystemString(resourceW.Comment);
|
||||
resource.Provider = GetSystemString(resourceW.Provider);
|
||||
}
|
||||
|
||||
static void ConvertResourceToResourceW(const CResource &resource, CResourceW &resourceW)
|
||||
{
|
||||
*(CResourceBase *)&resourceW = *(CResourceBase *)&resource;
|
||||
resourceW.LocalName = GetUnicodeString(resource.LocalName);
|
||||
resourceW.RemoteName = GetUnicodeString(resource.RemoteName);
|
||||
resourceW.Comment = GetUnicodeString(resource.Comment);
|
||||
resourceW.Provider = GetUnicodeString(resource.Provider);
|
||||
}
|
||||
#endif
|
||||
|
||||
DWORD CEnum::Open(DWORD scope, DWORD type, DWORD usage, const CResource *resource)
|
||||
{
|
||||
NETRESOURCE netResource;
|
||||
LPNETRESOURCE pointer;
|
||||
@@ -75,6 +150,35 @@ DWORD CEnum::Open(DWORD scope, DWORD type, DWORD usage,
|
||||
return Open(scope, type, usage, pointer);
|
||||
}
|
||||
|
||||
#ifndef _UNICODE
|
||||
DWORD CEnum::Open(DWORD scope, DWORD type, DWORD usage, const CResourceW *resource)
|
||||
{
|
||||
if (g_IsNT)
|
||||
{
|
||||
NETRESOURCEW netResource;
|
||||
LPNETRESOURCEW pointer;
|
||||
if (resource == 0)
|
||||
pointer = 0;
|
||||
else
|
||||
{
|
||||
ConvertCResourceToNETRESOURCE(*resource, netResource);
|
||||
pointer = &netResource;
|
||||
}
|
||||
return Open(scope, type, usage, pointer);
|
||||
}
|
||||
CResource *pointer;
|
||||
CResource resourceA;
|
||||
if (resource == 0)
|
||||
pointer = 0;
|
||||
else
|
||||
{
|
||||
ConvertResourceWToResource(*resource, resourceA);
|
||||
pointer = &resourceA;
|
||||
}
|
||||
return Open(scope, type, usage, pointer);
|
||||
}
|
||||
#endif
|
||||
|
||||
DWORD CEnum::Close()
|
||||
{
|
||||
if(!_handleAllocated)
|
||||
@@ -89,6 +193,13 @@ DWORD CEnum::Next(LPDWORD lpcCount, LPVOID lpBuffer, LPDWORD lpBufferSize)
|
||||
return ::WNetEnumResource(_handle, lpcCount, lpBuffer, lpBufferSize);
|
||||
}
|
||||
|
||||
#ifndef _UNICODE
|
||||
DWORD CEnum::NextW(LPDWORD lpcCount, LPVOID lpBuffer, LPDWORD lpBufferSize)
|
||||
{
|
||||
return ::WNetEnumResourceW(_handle, lpcCount, lpBuffer, lpBufferSize);
|
||||
}
|
||||
#endif
|
||||
|
||||
DWORD CEnum::Next(CResource &resource)
|
||||
{
|
||||
CByteBuffer byteBuffer;
|
||||
@@ -107,6 +218,34 @@ DWORD CEnum::Next(CResource &resource)
|
||||
return result;
|
||||
}
|
||||
|
||||
#ifndef _UNICODE
|
||||
DWORD CEnum::Next(CResourceW &resource)
|
||||
{
|
||||
if (g_IsNT)
|
||||
{
|
||||
CByteBuffer byteBuffer;
|
||||
const DWORD kBufferSize = 16384;
|
||||
byteBuffer.SetCapacity(kBufferSize);
|
||||
LPNETRESOURCEW lpnrLocal = (LPNETRESOURCEW) (BYTE *)(byteBuffer);
|
||||
ZeroMemory(lpnrLocal, kBufferSize);
|
||||
DWORD bufferSize = kBufferSize;
|
||||
DWORD numEntries = 1;
|
||||
DWORD result = NextW(&numEntries, lpnrLocal, &bufferSize);
|
||||
if (result != NO_ERROR)
|
||||
return result;
|
||||
if (numEntries != 1)
|
||||
return (DWORD)E_FAIL;
|
||||
ConvertNETRESOURCEToCResource(lpnrLocal[0], resource);
|
||||
return result;
|
||||
}
|
||||
CResource resourceA;
|
||||
DWORD result = Next(resourceA);
|
||||
ConvertResourceToResourceW(resourceA, resource);
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
DWORD GetResourceParent(const CResource &resource, CResource &parentResource)
|
||||
{
|
||||
CByteBuffer byteBuffer;
|
||||
@@ -124,6 +263,33 @@ DWORD GetResourceParent(const CResource &resource, CResource &parentResource)
|
||||
return result;
|
||||
}
|
||||
|
||||
#ifndef _UNICODE
|
||||
DWORD GetResourceParent(const CResourceW &resource, CResourceW &parentResource)
|
||||
{
|
||||
if (g_IsNT)
|
||||
{
|
||||
CByteBuffer byteBuffer;
|
||||
const DWORD kBufferSize = 16384;
|
||||
byteBuffer.SetCapacity(kBufferSize);
|
||||
LPNETRESOURCEW lpnrLocal = (LPNETRESOURCEW) (BYTE *)(byteBuffer);
|
||||
ZeroMemory(lpnrLocal, kBufferSize);
|
||||
DWORD bufferSize = kBufferSize;
|
||||
NETRESOURCEW netResource;
|
||||
ConvertCResourceToNETRESOURCE(resource, netResource);
|
||||
DWORD result = ::WNetGetResourceParentW(&netResource, lpnrLocal, &bufferSize);
|
||||
if (result != NO_ERROR)
|
||||
return result;
|
||||
ConvertNETRESOURCEToCResource(lpnrLocal[0], parentResource);
|
||||
return result;
|
||||
}
|
||||
CResource resourceA, parentResourceA;
|
||||
ConvertResourceWToResource(resource, resourceA);
|
||||
DWORD result = GetResourceParent(resourceA, parentResourceA);
|
||||
ConvertResourceToResourceW(parentResourceA, parentResource);
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
|
||||
DWORD GetResourceInformation(const CResource &resource,
|
||||
CResource &destResource, CSysString &systemPathPart)
|
||||
{
|
||||
@@ -146,6 +312,40 @@ DWORD GetResourceInformation(const CResource &resource,
|
||||
return result;
|
||||
}
|
||||
|
||||
#ifndef _UNICODE
|
||||
DWORD GetResourceInformation(const CResourceW &resource,
|
||||
CResourceW &destResource, UString &systemPathPart)
|
||||
{
|
||||
if (g_IsNT)
|
||||
{
|
||||
CByteBuffer byteBuffer;
|
||||
const DWORD kBufferSize = 16384;
|
||||
byteBuffer.SetCapacity(kBufferSize);
|
||||
LPNETRESOURCEW lpnrLocal = (LPNETRESOURCEW) (BYTE *)(byteBuffer);
|
||||
ZeroMemory(lpnrLocal, kBufferSize);
|
||||
DWORD bufferSize = kBufferSize;
|
||||
NETRESOURCEW netResource;
|
||||
ConvertCResourceToNETRESOURCE(resource, netResource);
|
||||
LPWSTR lplpSystem;
|
||||
DWORD result = ::WNetGetResourceInformationW(&netResource,
|
||||
lpnrLocal, &bufferSize, &lplpSystem);
|
||||
if (result != NO_ERROR)
|
||||
return result;
|
||||
if (lplpSystem != 0)
|
||||
systemPathPart = lplpSystem;
|
||||
ConvertNETRESOURCEToCResource(lpnrLocal[0], destResource);
|
||||
return result;
|
||||
}
|
||||
CResource resourceA, destResourceA;
|
||||
ConvertResourceWToResource(resource, resourceA);
|
||||
AString systemPathPartA;
|
||||
DWORD result = GetResourceInformation(resourceA, destResourceA, systemPathPartA);
|
||||
ConvertResourceToResourceW(destResourceA, destResource);
|
||||
systemPathPart = GetUnicodeString(systemPathPartA);
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
|
||||
DWORD AddConnection2(const CResource &resource,
|
||||
LPCTSTR password, LPCTSTR userName, DWORD flags)
|
||||
{
|
||||
@@ -155,4 +355,26 @@ DWORD AddConnection2(const CResource &resource,
|
||||
password, userName, flags);
|
||||
}
|
||||
|
||||
DWORD AddConnection2(const CResource &resource, LPCTSTR password, LPCTSTR userName, DWORD flags);
|
||||
|
||||
#ifndef _UNICODE
|
||||
DWORD AddConnection2(const CResourceW &resource, LPCWSTR password, LPCWSTR userName, DWORD flags)
|
||||
{
|
||||
if (g_IsNT)
|
||||
{
|
||||
NETRESOURCEW netResource;
|
||||
ConvertCResourceToNETRESOURCE(resource, netResource);
|
||||
return ::WNetAddConnection2W(&netResource,password, userName, flags);
|
||||
}
|
||||
CResource resourceA;
|
||||
ConvertResourceWToResource(resource, resourceA);
|
||||
CSysString passwordA = GetSystemString(password);
|
||||
CSysString userNameA = GetSystemString(userName);
|
||||
return AddConnection2(resourceA,
|
||||
password ? (LPCTSTR)passwordA: 0,
|
||||
userName ? (LPCTSTR)userNameA: 0,
|
||||
flags);
|
||||
}
|
||||
#endif
|
||||
|
||||
}}
|
||||
|
||||
Reference in New Issue
Block a user