this is a stripped down version of a tool i made to find out who has
a file locked on a file server.

after you find out the userid that has the file locked, you can use my
idlookup.bas program to get a name and more info about that user id.
it is posted at: http://www.powerbasic.com/support/pb...ad.php?t=23746

enjoy.

Code:
'=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
'    inuseby.bas        - by william burns   revised on 11/2002
'
' this program will search an nt type file server for file locks
' 
'=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
#compile exe
#register none
#dim all
#include "win32api.inc"
#include "lmaccess.inc"
%file                                   = 500
%chgpdc                                 = 510
%separator_515                          = 515
%butclose                               = 520
%butfname                               = 525
%help                                   = 600
%about                                  = 605
%frame1                                 = 100
%label1                                 = 105
%label2                                 = 110
%txtfile                                = 115
%txtsrv                                 = 120
%listbox1                               = 125
declare callback function dlgproc
declare function netfileenum lib "netapi32.dll" alias "netfileenum" (lpserver as any, lpbasepath as any, username as any, _
                                 byval level as dword, byval lpbuffer as dword, byval prefmaxlen as dword, lpentriesread as dword, lptotalentries as dword, lpresumehandle as dword) as dword

global hdlg    as long    ' dialog handle
global hmenu0&
global hmenu1&
global hmenu2&
'=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
function addlist(smymsg as string) as long
      local iret        as long
      static ilstwidth  as long
      if len(smymsg) > ilstwidth then
         ilstwidth = len(smymsg)
         control send hdlg, %listbox1, %lb_sethorizontalextent, (ilstwidth * 9), 0
      end if
      listbox add hdlg, %listbox1, smymsg
end function
'=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
function uniptrtoansi(byval uniptr as long) as string
  dim ilen   as long
  dim stext  as string
  ilen = lstrlenw(byval uniptr)     'get wide text length
  stext = peek$(uniptr, ilen * 2)   'get wide text from memory
  function = acode$(stext)          'return ascii text
end function
'=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
function files_in_use(byval sfiles as string, byval sserver as string) as long
   local lret           as long
   local zservername    as string * 200
   local zfilename      as string * 200
   local fi             as dword  ' holds pointer to system buffer
   local fitmp          as file_info_3 ptr
   local dnumread       as dword
   local dmaxlen        as dword
   local dtotalentries  as dword
   local hresume        as dword
   local icounter       as dword
   local stext          as string
   zservername = ucode$(sserver) + chr$(0) + chr$(0)
   zfilename   = ucode$(sfiles) + chr$(0) + chr$(0)
   dmaxlen = %maxdword
   lret = netfileenum(zservername,zfilename, byval 0 ,byval 3, byval varptr(fi), dmaxlen, dnumread, dtotalentries, hresume)
   function = lret
   select case lret
      case 0   'worked...
         'msgbox "total found = " + str$(dnumread),,"test"
         if dnumread < 1 then
            addlist "no file locks found!"
            exit select
         end if
         for icounter = 0 to dnumread -1
            fitmp = fi + (icounter * 20)  'move pointer to next array (4 bytes in a dword) * 5 feilds
            if @fitmp.fi3_path_name <> 0 then
               if uniptrtoansi(@fitmp.fi3_path_name) <> " then stext = uniptrtoansi(@fitmp.fi3_path_name)
               if (@fitmp.fi3_permissions and %perm_file_write) = %perm_file_write then stext = stext + " {has write access}"
               if (@fitmp.fi3_permissions and %perm_file_read) = %perm_file_read then stext = stext + " {has read access}"
               if (@fitmp.fi3_permissions and %perm_file_create) = %perm_file_create then stext = stext + " {has create access}"
               if @fitmp.fi3_user_name <> 0 and uniptrtoansi(@fitmp.fi3_path_name) <> " then stext = stext + " in use by " + uniptrtoansi(@fitmp.fi3_user_name)
               if stext <> " then addlist stext
            end if
         next icounter
      case %error_more_data
         addlist "more data waiting.  return code= " + str$(lret)
      case else
         addlist "error searching server.  ret= " + str$(lret)
   end select
   call netapibufferfree(byval varptr(fi))
end function
'=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
callback function dlgproc
   local iret           as long
   local sfile          as string
   local sname          as string
   local stext          as string
   static sserver as string
   local zbuffer        as asciiz * %max_path
   select case cbmsg
      case %wm_initdialog
         iret = getprofilestring("maner" & chr$(0), "fpsrv" & chr$(0), "\s-sp-fp1" & chr$(0), zbuffer, byval %max_path) ' get default settings from win.ini..
         sserver = trim$(zbuffer,chr$(0,23))
         control set text hdlg, %txtsrv, sserver
      case %wm_close
         call writeprofilestring("maner", "fpsrv", sserver & chr$(0))       'store in win.ini
      case %wm_command
         select case cbctl
            case  %idok
               if cbctlmsg=%bn_clicked then
                  control get text hdlg, %txtfile to sfile
                  listbox reset hdlg, %listbox1
                  if left$(sserver,2) = "\" then
                     call files_in_use(sfile, sserver)
                  else
                     msgbox "invalid server!   make sure server starts with \",,"error"
                  end if
               end if
            case  %listbox1
            case  %txtsrv
               if cbctlmsg=%en_change then
                  control get text hdlg, %txtsrv to sserver   'update var
               end if
            case  %about
               msgbox "this utility will check if a file has file locks on a server. " + $crlf + $crlf _
                     + "to use:" + $crlf + $crlf _
                     + "1.) type in the directory path (path at the server) to list all locked files in it." + $crlf _
                     + "      example:  d:\data\common\" + $crlf + $crlf _
                     + "2.) type name of server to check." + $crlf _
                     + "      note: servername must start with \ " + $crlf _
                     + "      example: \s-sp-fp1" + $crlf + $crlf _
                     + "3.) click on the lookup button.  " + $crlf + $crlf + $crlf _
                     ,%mb_iconinformation,"inuseby    ver 1.5    by william burns"
            case  %butclose
                  dialog end hdlg
            case else
         end select
      case else
   end select
end function
'=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

'=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
function pbmain
   local style&
   style& = %ws_popup or %ds_modalframe or %ws_caption or %ws_minimizebox or %ws_sysmenu or %ds_center
   dialog new 0, "in use by who?", 0, 0,  240,  177, style&, 0 to hdlg
   menu new bar to hmenu0&
   menu new popup to hmenu1&
   menu add popup, hmenu0& ,"&file", hmenu1&, %mf_enabled
   menu add string, hmenu1&, "&lookup file lock info",  %idok, %mf_enabled
   menu add string, hmenu1&, "-",  %separator_515, %mf_enabled
   menu add string, hmenu1&, "e&xit",  %butclose, %mf_enabled
   menu new popup to hmenu2&
   menu add popup, hmenu0& ,"&help", hmenu2&, %mf_enabled
   menu add string, hmenu2&, "&about",  %about, %mf_enabled
   menu attach hmenu0&, hdlg
   control add frame, hdlg,  %frame1,  "file lock information", 3, 42, 235, 121, %ws_child or %ws_visible or %bs_groupbox, %ws_ex_transparent
   control add label, hdlg,  %label1,  "file or dir to check:", 2, 7, 85, 12, %ws_child or %ws_visible or %ss_center
   control add textbox, hdlg,  %txtfile,  "d:\data\groups\", 85, 5, 83, 12, %ws_child or %ws_visible or %es_autohscroll or %ws_tabstop, %ws_ex_clientedge
   control add "button", hdlg,  %idok,  "&lookup", 179, 5, 53, 15, %ws_child or %ws_visible or %bs_pushbutton or %ws_tabstop
   control add "button", hdlg,  %butclose,  "&close", 179, 25, 53, 15, %ws_child or %ws_visible or %bs_pushbutton or %ws_tabstop
   control add label, hdlg,  %label2,  "   on what server:", 3, 27, 83, 12, %ws_child or %ws_visible or %ss_center
   control add textbox, hdlg,  %txtsrv,  ", 85, 25, 83, 12, %ws_child or %ws_visible or %es_autohscroll or %ws_tabstop, %ws_ex_clientedge
   control add listbox, hdlg,  %listbox1, , 8, 52, 224, 106, %ws_child or %ws_visible or %lbs_notify or %lbs_nointegralheight or %ws_vscroll or %ws_tabstop or %lbs_usetabstops or %ws_hscroll or %lbs_sort, %ws_ex_clientedge
   dialog show modal hdlg , call dlgproc
end function
'=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
------------------
"i haven't lost my mind... its backed up on tape... i think??"



[this message has been edited by william burns (edited may 08, 2003).]