BS2_USER_MASK maskWantUpdate = (BS2_USER_MASK)BS2UserMaskEnum.SETTING | (BS2_USER_MASK)BS2UserMaskEnum.SETTING_EX | (BS2_USER_MASK)BS2UserMaskEnum.JOB; BS2ErrorCode sdkResult = BS2ErrorCode.BS_SDK_SUCCESS; BS2UserFaceExBlob[] userBlob = Util.AllocateStructureArray(1); userBlob[0].cardObjs = IntPtr.Zero; userBlob[0].fingerObjs = IntPtr.Zero; userBlob[0].faceObjs = IntPtr.Zero; userBlob[0].user_photo_obj = IntPtr.Zero; userBlob[0].faceExObjs = IntPtr.Zero; userBlob[0].setting.fingerAuthMode = (byte)BS2FingerAuthModeEnum.NONE; userBlob[0].setting.cardAuthMode = (byte)BS2CardAuthModeEnum.NONE; userBlob[0].setting.idAuthMode = (byte)BS2IDAuthModeEnum.NONE; userBlob[0].settingEx.faceAuthMode = (byte)BS2ExtFaceAuthModeEnum.NONE; userBlob[0].settingEx.fingerprintAuthMode = (byte)BS2ExtFingerprintAuthModeEnum.NONE; userBlob[0].settingEx.cardAuthMode = (byte)BS2ExtCardAuthModeEnum.NONE; userBlob[0].settingEx.idAuthMode = (byte)BS2ExtIDAuthModeEnum.NONE; string userID; if (BS2ErrorCode.BS_SDK_SUCCESS != (sdkResult = getUserBlobUserID(ref userBlob[0].user, out userID))) return; if ((maskWantUpdate & (BS2_USER_MASK)BS2UserMaskEnum.SETTING) == (BS2_USER_MASK)BS2UserMaskEnum.SETTING) { if (BS2ErrorCode.BS_SDK_SUCCESS != (sdkResult = getUserBlobExpiryDate(ref userBlob[0].setting))) return; if (BS2ErrorCode.BS_SDK_SUCCESS != (sdkResult = getUserBlobPrivateAuthMode(ref userBlob[0].setting))) return; if (BS2ErrorCode.BS_SDK_SUCCESS != (sdkResult = getUserBlobSecurityLevel(ref userBlob[0].setting))) return; } if ((maskWantUpdate & (BS2_USER_MASK)BS2UserMaskEnum.SETTING_EX) == (BS2_USER_MASK)BS2UserMaskEnum.SETTING_EX) { if (BS2ErrorCode.BS_SDK_SUCCESS != (sdkResult = getUserBlobPrivateAuthModeEx(ref userBlob[0].settingEx))) return; } // ... if ((maskWantUpdate & (BS2_USER_MASK)BS2UserMaskEnum.JOB) == (BS2_USER_MASK)BS2UserMaskEnum.JOB) { Console.WriteLine("Do you want to change/delete #{0} jobs? (0:Change, 1:Delete)", userID); Console.Write(">> "); int selected = Util.GetInput(0); switch (selected) { case 0: // Change jobs if (BS2ErrorCode.BS_SDK_SUCCESS != (sdkResult = getUserBlobJobCode(ref userBlob[0].job))) return; userBlob[0].user.infoMask |= (byte)BS2UserInfoMaskEnum.JOB_CODE; break; case 1: // Delete default: maskWantUpdate &= ~(BS2_USER_MASK)BS2UserMaskEnum.JOB; break; } } else { // Keep userBlob[0].user.infoMask |= (byte)BS2UserInfoMaskEnum.JOB_CODE; } userBlob[0].user.numCards = 0; if ((maskWantUpdate & (BS2_USER_MASK)BS2UserMaskEnum.CARD) == (BS2_USER_MASK)BS2UserMaskEnum.CARD) { Console.WriteLine("Do you want to change/delete #{0} cards? (0:Change, 1:Delete)", userID); Console.Write(">> "); int selected = Util.GetInput(0); switch (selected) { case 0: // Change cards if (BS2ErrorCode.BS_SDK_SUCCESS != (sdkResult = getUserBlobCardInfo(sdkContext, deviceID, ref userBlob[0].cardObjs, ref userBlob[0].user.numCards))) return; userBlob[0].user.infoMask |= (byte)BS2UserInfoMaskEnum.CARD; break; case 1: // Delete cards on the device default: // unmasking and numCards = 0; maskWantUpdate &= ~(BS2_USER_MASK)BS2UserMaskEnum.CARD; break; } } else { // Keep userBlob[0].user.infoMask |= (byte)BS2UserInfoMaskEnum.CARD; } // ... sdkResult = (BS2ErrorCode)API.BS2_PartialUpdateUserFaceEx(sdkContext, deviceID, maskWantUpdate, userBlob, (UInt32)numOfUser); if (BS2ErrorCode.BS_SDK_SUCCESS != sdkResult) Console.WriteLine("BS2_PartialUpdateUserFaceEx call failed {0}", sdkResult);