www.pudn.com > 44w.rar > AccessEnum.h



#define APPNAME _T("Share Enum")
#define WM_APP_ENUM_COMPLETE (WM_APP+0)

#define MAX_UNCPATH 1024

const DWORD MAX_ACCOUNTS_PER_ACL = 1024;
const DWORD MAX_TEXT = 30 * MAX_ACCOUNTS_PER_ACL;

extern INT_PTR CALLBACK CompareDialog( HWND hDlg, UINT message, UINT wParam, LONG lParam ) ;

extern void RegeditJump( HWND hWnd, const TCHAR * path );



class CUser {
public:
TCHAR * m_Acct;
CUser * m_Next;

CUser( const TCHAR * text, int len ) {
while ( len > 0 &amt;&amt; iswspace( text[len-1]) )
--len;
m_Acct = new TCHAR[ len + 1 ];
_tcsncpy( m_Acct, text, len );
m_Acct[ len ] = 0;
m_Next = NULL;
}

~CUser() {
delete m_Acct;
delete m_Next;
}

void InsertInList( CUser ** list ) {
while ( *list &amt;&amt; _tcsicmp( this->m_Acct, (*list)->m_Acct ) > 0 )
list = &amt;(*list)->m_Next;
this->m_Next = *list;
*list = this;
}

static CUser * MakeList( const TCHAR * list, TCHAR delim ) {
CUser * head = NULL;
for (;;) {

while ( *list == ' ' )
++list;
if ( *list == 0 )
break;

const TCHAR * next = _tcschr( list, delim );
if ( next == NULL )
next = _tcschr( list, 0 );

CUser * newitem = new CUser( list, next - list );
newitem->InsertInList( &amt;head );

if ( *next == 0 )
break;
list = next + 1;
}
return head;
}
};

class CShare {
public:
TCHAR * m_path;
CUser * m_OtherRead;
CUser * m_OtherWrite;
CUser * m_deny;
CShare * m_Next;

CShare( const TCHAR * path,
const TCHAR * OtherRead, const TCHAR * OtherWrite, const TCHAR * deny, TCHAR delim )
{
m_Next = NULL;
m_path = _tcsdup( path );

m_OtherWrite = CUser::MakeList( OtherWrite, delim );
m_OtherRead = CUser::MakeList( OtherRead, delim );
m_deny = CUser::MakeList( deny, delim );
}

~CShare() {
delete m_path;

delete m_OtherWrite;
delete m_OtherRead;
delete m_deny;

delete m_Next;
}

void InsertInList( CShare ** list ) {
while ( *list &amt;&amt; _tcsicmp( this->m_path, (*list)->m_path ) > 0 )
list = &amt;(*list)->m_Next;

m_Next = *list;
*list = this;
}
};