vb.net - UserPrincipal.Save() - vshost32.exe has stopped working - Corrupt heap -


i'm writing software import csv file active directory (to create user accounts). @ point know working importing multiple accounts. i'm not sure i've changed it's been while since last worked on it. imports 2 accounts , crashes on line below during third loop iteration (however third account still created):

newuser.save() 

when crashes error "vshost32.exe has stopped working". enabled native code debugging , error: "0xc0000374: heap has been corrupted" , invalidcastexception (see immediate window @ end of post full error). testing i've been deleting , recreating same accounts. if don't delete first 3 accounts, principal exists exception handled , program crashes on 4th iteration, , 5th , on. never crashes on first two. (the data i'm importing identical except numbers - e.g. samaccountnames: test1, test2, test3 etc)

my code

private sub bwimport_dowork(sender object, e system.componentmodel.doworkeventargs) handles bwimport.dowork     dim _worker backgroundworker = ctype(sender, backgroundworker)      dim beginimport new startimport(addressof progressform.startimport)     me.invoke(beginimport, new object() {dtusers.rows.count})      dim log new updatelog(addressof progressform.updatelog)      '### do: check mandatory columns/attributes in datatable      '### do: check duplicate samaccountnames, userprincipalnames , cononical names  #if not debug     try #end if      dim rownum integer = 0 'keep track of how many accounts have been created         each row datarow in dtusers.rows             dim newuser userprincipalex = new userprincipalex(adctx)              newuser.samaccountname = row("samaccountname")             newuser.setpassword(row("password"))              'general tab (of template exporter)             if row.table.columns.contains("initials")                 newuser.initials = row("initials")             end if              if row.table.columns.contains("givenname")                 newuser.givenname = row("givenname")             end if              if row.table.columns.contains("sn")                 newuser.surname = row("sn")             end if              if row.table.columns.contains("displayname")                 newuser.displayname = row("displayname")             end if              if row.table.columns.contains("description")                 newuser.description = row("description")             end if              if row.table.columns.contains("physicaldeliveryofficename")                 newuser.office = row("physicaldeliveryofficename")             end if              if row.table.columns.contains("telephonenumber")                 newuser.telephonenumber = row("telephonenumber")             end if              if row.table.columns.contains("wwwhomepage")                 newuser.webpage = row("wwwhomepage")             end if              'address tab (of template exporter)             if row.table.columns.contains("streetaddress")                 newuser.street = row("streetaddress")             end if              if row.table.columns.contains("postofficebox")                 newuser.pobox = row("postofficebox")             end if              if row.table.columns.contains("l") 'city                 newuser.city = row("l")             end if              if row.table.columns.contains("st") 'state/province                 newuser.state = row("st")             end if              if row.table.columns.contains("postalcode")                 newuser.postcode = row("postalcode")             end if              '### do: add country fields              'account tab (of template exporter)             if row.table.columns.contains("userprincipalname")                 newuser.userprincipalname = row("userprincipalname")             end if              if row.table.columns.contains("resetpassword")                 if row("resetpassword").tostring.tolower = "yes"                     newuser.expirepasswordnow() 'force user change password @ next logon                 end if             end if              if row.table.columns.contains("preventpasswordchange")                 if row("preventpasswordchange").tostring.tolower = "yes"                     newuser.usercannotchangepassword = true                 end if             end if              if row.table.columns.contains("passwordneverexpires")                 if row("passwordneverexpires").tostring.tolower = "yes"                     newuser.passwordneverexpires = true                 end if             end if              if row.table.columns.contains("accountdisabled")                  if row("accountdisabled").tostring.tolower = "yes"                     newuser.enabled = false                 else                     newuser.enabled = true                 end if              else 'enable account default if not specified                 newuser.enabled = true             end if              if row.table.columns.contains("accountexpires")                 dim expireydate date                 date.tryparse(row("accountexpires"), expireydate) 'try convert data row("accountexpires") date                 newuser.accountexpirationdate = expireydate             end if              'profile tab (of template exporter)             if row.table.columns.contains("profilepath")                 newuser.profilepath = row("profilepath")             end if              if row.table.columns.contains("scriptpath")                 newuser.scriptpath = row("scriptpath")             end if              if row.table.columns.contains("homedrive")                 newuser.homedrive = row("homedrive")             end if              if row.table.columns.contains("homedirectory")                 newuser.homedirectory = row("homedirectory")             end if              'telephones tab (of template exporter)             if row.table.columns.contains("homephone")                 newuser.homephone = row("homephone")             end if              if row.table.columns.contains("pager")                 newuser.pager = row("pager")             end if              if row.table.columns.contains("mobile")                 newuser.mobile = row("mobile")             end if              if row.table.columns.contains("facsimiletelephonenumber")                 newuser.fax = row("facsimiletelephonenumber")             end if              if row.table.columns.contains("ipphone")                 newuser.ipphone = row("ipphone")             end if              'organization tab             if row.table.columns.contains("title")                 newuser.title = row("title")             end if              if row.table.columns.contains("department")                 newuser.department = row("department")             end if              if row.table.columns.contains("company")                 newuser.company = row("company")             end if          rownum += 1         _worker.reportprogress(rownum) 'update progress dialog          try             newuser.save() 'save user active directory             me.invoke(log, new object() {"successfully created " + row("samaccountname") + " (" + row("displayname") + ")", frmprogress.logtype.success})         catch ex principalexistsexception             me.invoke(log, new object() {"error creating " + row("samaccountname") + " (" + row("displayname") + "). " + ex.message, frmprogress.logtype.failure})             continue         end try          'member of tab         if row.table.columns.contains("memberof")             dim groups() string = row("memberof").tostring.split(";")              'add user specified groups             dim groupprincipal groupprincipal              try 'try adding group(s)                  each group string in groups                     groupprincipal = groupprincipal.findbyidentity(adctx, group) 'search group name, sid, samaccountname or display name                      if groupprincipal isnot nothing                         groupprincipal.members.add(newuser) 'add user group                         groupprincipal.save()                     else                         me.invoke(log, new object() {"unable add " + row("samaccountname") + " group: " + group + ". group not found.", frmprogress.logtype.failure})                     end if                  next              catch ex principalexistsexception                 '### do: try group name in exception                 me.invoke(log, new object() {"error adding " + row("samaccountname") + " (" + row("displayname") + ") " + "group(s). " + ex.message, frmprogress.logtype.failure})             end try          end if          newuser.dispose() 'dispose of newuser object          next  #if not debug     catch ex exception         msgbox(ex.message, msgboxstyle.critical)     end try #end if   end sub 

immediate window (when native debugging enabled)

critical error detected c0000374 first-chance exception @ 0x76fbf996 in ad user importer.exe: 0xc0000374: heap has been corrupted. first chance exception of type 'system.invalidcastexception' occured in system.directoryservices.accountmanagement.dll 


Comments

Popular posts from this blog

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

linux - disk space limitation when creating war file -

How to provide Authorization & Authentication using Asp.net, C#? -