Re: Список откытых файловна NT сервере из под Win9x
От: migel  
Дата: 06.12.01 10:11
Оценка: 4 (1)
Здравствуйте Mikki, Вы писали:

M>Доброе утро,день,вечер,ночь!


M> Не поможет ли кто решить следующую проблему:

M> получить список открытых файлов на Windows NT сервере из под Windows9x.

M> Как решить эту задачу из под Windows NT я знаю. Пробовал решить и SUBJ однако при вызове функции NetFileEnum получаю "Ошибка в параметрах".


M> Спасибо заранее.

Хм пример из MSDN...
#include <stdio.h>
#include <assert.h>
#include <windows.h> 
#include <svrapi.h>

const short MAX_ENTRIES = 20;

int main(int argc, char FAR * argv[])
{
   char FAR * pszServerName = NULL;
   short nLevel = 50;
   struct file_info_50* pBuf = NULL;
   struct file_info_50* pTmpBuf = NULL;
   short cbBuffer;
   short nEntriesRead = 0;
   short nTotalEntries = 0;
   short nTotalCount = 0;
   int i;
   NET_API_STATUS nStatus;
   //
   // ServerName can be NULL to indicate the local computer.
   //
   if (argc > 2)
   {
      printf("Usage: %s [\\\\ServerName]\n", argv[0]);
      exit(1);
   }

   if (argc == 2)
      pszServerName = argv[1];
   //
   // Allocate the memory required to receive a maximum of
   //  20 file_info_50 structures.
   //
   cbBuffer = MAX_ENTRIES * sizeof(struct file_info_50);

   pBuf = malloc(cbBuffer);

   if (pBuf == NULL)
      printf("No memory\n");

   // Call the NetFileEnum function to list the
   //  open files, specifying information level 50.
   //
   nStatus = NetFileEnum(pszServerName,
                         NULL,
                         nLevel,
                         (char FAR *)pBuf,
                         cbBuffer,
                         &nEntriesRead,
                         &nTotalEntries);
   //
   // Loop through the entries; process errors.
   //
   if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA))
   {
      if ((pTmpBuf = pBuf) != NULL)
      {
         for (i = 0; (i < nEntriesRead); i++)
         {
            assert(pTmpBuf != NULL);

            if (pTmpBuf == NULL)
            {
               fprintf(stderr, "An access violation has occurred\n");
               break;
            }
            //
            // Display the information for each entry retrieved.
            //
            printf("\tShare: %s\n", pTmpBuf->fi50_sharename);
            printf("\n\tPath: %s\n", pTmpBuf->fi50_pathname);
            printf("\tUser:   %s\n", pTmpBuf->fi50_username);
            printf("\tID:   %d\n", pTmpBuf->fi50_id);

            pTmpBuf++;
            nTotalCount++;
         }
      }
   }
   else
      fprintf(stderr, "A system error has occurred: %d\n", nStatus);
   //
   // Display a warning if the buffer was not large enough
   //  to contain all available entries.
   //
   if ((nEntriesRead < nTotalEntries) || (nStatus == ERROR_MORE_DATA))
      fprintf(stderr, "Not all entries have been enumerated\n");
   //
   // Free the allocated memory.
   //
   if (pBuf != NULL)
      free(pBuf);

   fprintf(stderr, "\nTotal of %d entries enumerated\n", nTotalCount);

   return 0;
}
Список откытых файловна NT сервере из под Win9x
От: Mikki  
Дата: 05.12.01 15:23
Оценка:
Доброе утро,день,вечер,ночь!

Не поможет ли кто решить следующую проблему:
получить список открытых файлов на Windows NT сервере из под Windows9x.

Как решить эту задачу из под Windows NT я знаю. Пробовал решить и SUBJ однако при вызове функции NetFileEnum получаю "Ошибка в параметрах".

Спасибо заранее.
Re: Список откытых файловна NT сервере из под Win9x
От: Lokki Зимбабве  
Дата: 05.12.01 16:09
Оценка:
Здравствуйте Mikki, Вы писали:

M>Доброе утро,день,вечер,ночь!


M> Не поможет ли кто решить следующую проблему:

M> получить список открытых файлов на Windows NT сервере из под Windows9x.

M> Как решить эту задачу из под Windows NT я знаю. Пробовал решить и SUBJ однако при вызове функции NetFileEnum получаю "Ошибка в параметрах".


M> Спасибо заранее.

в голову приходит только одно решение — юзай DCOM и с 9x кидай свой компонент на нт сервер, а после с 9х вызывай его функцию , которая тебе даст список файлов.
Re: Список откытых файловна NT сервере из под Win9x
От: TSS Россия http://www.sdl.ru
Дата: 06.12.01 09:56
Оценка:
Здравствуйте Mikki, Вы писали:

M> Как решить эту задачу из под Windows NT я знаю. Пробовал решить и SUBJ однако при вызове функции NetFileEnum получаю "Ошибка в параметрах".


Возможно, ты действительно ошибся в параметрах. Кинь кусок кода, разберем его по косточкам...
Signed, [TSS] /SDL/
Re[2]: Список откытых файловна NT сервере из под Win9x
От: Mikki  
Дата: 07.12.01 11:35
Оценка:
Здравствуйте TSS, Вы писали:

TSS>Возможно, ты действительно ошибся в параметрах. Кинь кусок кода, разберем его по косточкам...


#include <windows.h>
#include <stdio.h>
#include <svrapi.h>
#pragma hdrstop

#pragma comment( lib, "svrapi.lib" )

void PrintError( DWORD err )
{
char msgbuf[4096];

FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, err,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
msgbuf, sizeof( msgbuf ), NULL );
CharToOem(msgbuf,msgbuf);
printf( "Error %d: %s\n", err, msgbuf );
}

void DisplayFile( const char *server )
{
char *buf;
int bufsize;
file_info_0 *curf;
DWORD rc, i;
WORD read, total,level;

for (level=0;level<=50;level++)
{
buf = NULL;
bufsize = 1024;
do
{
printf( "Trying: level = %d bufsize = %d bytes\n",level,bufsize );
if ( buf != NULL )
free( buf );
buf = (char *) malloc( bufsize );
rc = NetFileEnum( server,NULL,level,buf,bufsize, &read, &total );
bufsize += 1024;
} while ( bufsize < 65536 && ( rc == ERROR_MORE_DATA || rc == ERROR_INVALID_PARAMETER ) );
if ( rc == ERROR_SUCCESS )
break;
}

if ( rc != ERROR_SUCCESS )
{
PrintError( rc );
return;
}

/* for ( i = 0, curf = (file_info_0 *) buf; i < read; ++ i, ++ curf )
printf( "%-12S %-15S \n",
curf->fi0_username, curf->fi0_pathname);*/
}


int main( int argc, char *argv[] )
{
const char *server = NULL;

if ( argc > 2 )
{
puts( "\nnfile95 [\\\\server]\n" );
puts( "\\\\server -- machine to check, with backslashes, please." );
puts( " Default: local machine.\n" );
return 1;
}

if ( argc > 1 )
server = argv[1];
DisplayFile(server);
return 0;
}

Вот вроде бы и все. Спасибо за внимание.
Re[2]: Список откытых файловна NT сервере из под Win9x
От: Mikki  
Дата: 07.12.01 11:40
Оценка:
Здравствуйте migel, Вы писали:

M>Хм пример из MSDN...

M>[ccode]
M>#include <stdio.h>

Немного модифицировал Ваш код. Добавил фунцию:

void PrintError( DWORD err )
{
char msgbuf[4096];

FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, err,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
msgbuf, sizeof( msgbuf ), NULL );
CharToOem(msgbuf,msgbuf);
printf( "Error %d: %s\n", err, msgbuf );
}

На выходе получаем:
G:\ALL>openfile.exe \\SR2K
Error 87: Параметр задан неверно.


Total of 0 entries enumerated
То есть те же грабли на которые я уже наступил.
Спасибо за ответ.
Re[3]: Список откытых файловна NT сервере из под Win9x
От: migel  
Дата: 07.12.01 13:58
Оценка:
Здравствуйте Mikki, Вы писали:

M>Здравствуйте TSS, Вы писали:


TSS>>Возможно, ты действительно ошибся в параметрах. Кинь кусок кода, разберем его по косточкам...


M>#include <windows.h>

M>#include <stdio.h>
M>#include <svrapi.h>
M>#pragma hdrstop

M>#pragma comment( lib, "svrapi.lib" )


M>void PrintError( DWORD err )

M>{
M> char msgbuf[4096];

M> FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, err,

M> MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
M> msgbuf, sizeof( msgbuf ), NULL );
M> CharToOem(msgbuf,msgbuf);
M> printf( "Error %d: %s\n", err, msgbuf );
M>}

M>void DisplayFile( const char *server )

M>{
M> char *buf;
M> int bufsize;
M> file_info_0 *curf;
M> DWORD rc, i;
M> WORD read, total,level;

M> for (level=0;level<=50;level++)

M> {
M> buf = NULL;
M> bufsize = 1024;
M> do
M> {
M> printf( "Trying: level = %d bufsize = %d bytes\n",level,bufsize );
M> if ( buf != NULL )
M> free( buf );
M> buf = (char *) malloc( bufsize );
M> rc = NetFileEnum( server,NULL,level,buf,bufsize, &read, &total );
M> bufsize += 1024;
M> } while ( bufsize < 65536 && ( rc == ERROR_MORE_DATA || rc == ERROR_INVALID_PARAMETER ) );
M> if ( rc == ERROR_SUCCESS )
M> break;
M> }

M> if ( rc != ERROR_SUCCESS )

M> {
M> PrintError( rc );
M> return;
M> }
M>
M> /* for ( i = 0, curf = (file_info_0 *) buf; i < read; ++ i, ++ curf )
M> printf( "%-12S %-15S \n",
M> curf->fi0_username, curf->fi0_pathname);*/
M>}


M>int main( int argc, char *argv[] )

M>{
M> const char *server = NULL;

M> if ( argc > 2 )

M> {
M> puts( "\nnfile95 [\\\\server]\n" );
M> puts( "\\\\server -- machine to check, with backslashes, please." );
M> puts( " Default: local machine.\n" );
M> return 1;
M> }

M> if ( argc > 1 )

M> server = argv[1];
M> DisplayFile(server);
M> return 0;
M>}

M>Вот вроде бы и все. Спасибо за внимание.


Ну так Вынь 95/98 вроде как только уровень 50 поддерживает а ты ей фигню подсовываеш — уровень 0 с самого начала и успешно вываливаешся, так в чем же грабли?.
Re[4]: Список откытых файловна NT сервере из под Win9x
От: Mikki  
Дата: 10.12.01 06:52
Оценка:
Здравствуйте migel, Вы писали:

M>Ну так Вынь 95/98 вроде как только уровень 50 поддерживает а ты ей фигню подсовываеш — уровень 0 с самого начала и успешно вываливаешся, так в чем же грабли?.


К сожалению и при 50 ответ тот же. Эт я уже методом перебора пробовал, но и это не помогло. Потому я и не знаю как из этого тупика выйти. Вот и попросил помощи у Гуру.
Спасибо за Ваш ответ.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.